• JavaScript中常用对象方法总结


    Object.create()创建对象

    该方法用于创建一个新对象,新建对象具有指定原型和若干个指定属性;

    1. Object.create(proto)
    2. Object.create(proto, propertiesObject)

     该方法接收两个参数,第一个参数是新建对象的指定原型对象,第二个参数可选,表示新建对象的某些属性;第二个参数要传入一个对象,对象内容是键值对,配置有四个参数,分别表示如下:

    • value:属性值
    • enumerable: 是否可被枚举(可遍历)
    • writable: 是否可被重写(改变)
    • configrable:是否可被更改和删除,以及除value和writable特性外的其它特性是否可以被修改。
    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. obj1.intro(); // my name is 小明
    9. var obj2 = Object.create(obj1, {
    10. 'EnglishName': {value: 'xiaoMing', writable: false, configurable: false, enumerable: true },
    11. 'hobby': {value: 'playing', writable: true, configurable: false, enumerable: false }
    12. })
    13. obj2.intro() // my name is 小明
    14. console.log(obj2.EnglishName); // xiaoMing
    15. obj2.EnglishName = 'xiaoHong'
    16. console.log(obj2.EnglishName); // xiaoMing,未被重写
    17. for(var item in obj2) {
    18. console.log(item); // EnglishName name age intro hooby并未被遍历出来
    19. }
    20. console.log(delete obj2.age); // true
    21. console.log(delete obj2.hobby); // false 删不掉hobby属性

    补充:

    1. 使用对象直接创建的属性,上述四种参数默认为true
    2. 使用Object.create() / Object.defineProperty() / Object.defineProperties()创建出来的属性,上述四种参数默认为false

    Object.defineproperty()修改对象旧属性或定义对象新属性

    该方法可以对对象已有的属性进行修改,或增加新的属性

    Object.defineProperty(obj, prop, descriptor)

    该方法接收三个参数,分别是要定义属性的对象 / 要定义的属性名称 / 属性描述对象(该对象依然是传入上述四种配置

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. Object.defineProperty(obj1, 'name', {
    9. value: '小红',
    10. configurable: false
    11. })
    12. console.log(obj1); // {name: '小红', age: 13, intro: ƒ}
    13. console.log(delete obj1.name); // false

    Object.defineproperties()修改对象多个旧属性或定义对象多个新属性

    该方法与上面那个方法使用方式相似,只不过可以对多个属性进行修改或新增;

    Object.defineProperties(obj, props)

    该方法传入两个参数,其中第一个参数依然是要定义或修改属性的对象;第二个参数定义属性描述符对象(上述四个参数),分别以对象的形式传入,属性做键名~

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. Object.defineProperties(obj1, {
    9. 'name': {
    10. value: '小红',
    11. writable: false
    12. },
    13. 'englishName': {
    14. value: 'Red',
    15. enumerable: false
    16. }
    17. })
    18. console.log(obj1); // {name: '小红', age: 13, englishName: 'Red', intro: ƒ}

    Object.getOwnPropertyDescriptor()获取某自有属性的属性描述对象

    该方法用于获取对象中某个自有属性(非继承得来)的属性描述对象;

    Object.getOwnPropertyDescriptor(obj, prop)

    该方法传入两个参数,第一个参数是要查找的目标对象,第二个参数是目标对象内自有属性名称;

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. var namepro = Object.getOwnPropertyDescriptor(obj1, 'name');
    9. console.log(namepro); // { configurable: true enumerable: true value: "小明" writable: true }

    Object.getOwnPropertyDescriptors()获取对象所有自身属性的属性描述对象

    该方法用于获取某对象上所有自身属性(非继承)的属性描述对象,

    Object.getOwnPropertyDescriptors(obj)

    只有一个参数,表示要查找的目标对象,如果没有任何自身属性,则返回一个空对象;

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. var pro = Object.getOwnPropertyDescriptors(obj1);
    9. console.log(pro);

    Object.getOwnPropertyNames()获取对象所有自有属性

    该方法获取对象上所有的自由属性(不包含继承得来的属性和Symbol属性);

    Object.getOwnPropertyNames(obj)

     传入一个目标对象作为参数;返回一个字符串数组

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. var obj2 = Object.create(obj1, {
    9. 'EnglishName': {
    10. value: 'xiaoMing',
    11. enumerable: false
    12. },
    13. 'class': {
    14. value: '四年级',
    15. configurable: false
    16. }
    17. });
    18. console.log(Object.getOwnPropertyNames(obj2)); //  ['EnglishName', 'class'] 继承属性name,age,intro并未获取到

    Object.getOwnPropertySymbols()获取对象的所有 Symbol 属性

    该方法用于获取某对象中所有 Symbol 属性,返回一个数组;

    Object.getOwnPropertySymbols(obj)
    1. var obj = {};
    2. var a = Symbol("a");
    3. obj[a] = "localSymbol";
    4. obj.name = '小明'
    5. console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a)]

    Object.setPrototypeOf()设置一个指定的原型对象

    该方法用于为某对象设置一个指定的原型对象,即Prototype

    Object.setPrototypeOf(obj, prototype)

    传入两个参数,第一个参数是要设置的对象,第二个参数表示要指定的新原型(Prototype)

    如果第一个参数不是一个对象,则该方法啥也不做;

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. var obj2 = {}
    9. Object.setPrototypeOf(obj2, obj1)
    10. console.log(obj2.name); //  小明
    11. obj2.intro() // my name is 小明

    Object.getPrototypeOf()获取某对象的原型对象prototype

    该方法返回指定对象的对象原型prototype

    Object.getPrototypeOf(obj)

    只传入一个参数,即目标对象,若该目标对象没有继承属性,则返回null

    1. function Obj() {
    2. }
    3. let obj = new Obj()
    4. console.log(Object.getPrototypeOf(obj) === Obj.prototype) // true
    5. const prototype1 = {};
    6. const object1 = Object.create(prototype1);
    7. console.log(Object.getPrototypeOf(object1) === prototype1); // true

    Object.assign()合并对象

    该方法用于将源对象(sources)的所有可枚举的自有属性(不是通过继承得来的属性)复制到目标对象(target)上;

    返回合并后的对象target;

    Object.assign(target, ...sources)

    若源对象与目标对象具有相同的key,则目标对象中的属性将会被源对象中的属性覆盖;

    该方法属于浅拷贝

    Object.is()

    该方法用于比较两个值是否严格相等,与严格相等运算符===的行为基本一致,返回布尔值;但是在处理NaN和-0/+0o有差异

    Object.is(value1, value2); // value1和value2是要比较的两个值
    1. console.log(Object.is(1, 1)) // true
    2. console.log(Object.is(NaN, NaN)) // true
    3. console.log(Object.is(+0, -0)) // false
    4. console.log(1 === 1) // true
    5. console.log(NaN === NaN) // false
    6. console.log(+0 === -0) // true
    7. console.log(Object.is([], [])); // false
    8. console.log([] === []); // false

    Object.keys()返回自身可枚举键名

    该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键名

    Object.keys(obj) // obj要遍历的对象
    

    该方法返回一个由键名组成的数组 

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. sing: function() {
    5. console.log('he can sing ~');
    6. }
    7. }
    8. console.log(Object.keys(obj1)); // ['name', 'age', 'sing']

    Object.values()返回自身可枚举键值

    该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键值;

    Object.values(obj) // obj为要遍历的对象

    该方法返回由键值组成的数组

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. sing: function() {
    5. console.log('he can sing ~');
    6. }
    7. }
    8. console.log(Object.values(obj1)); // ['小明', 13, ƒ]

    Object.entries()返回自身可枚举键值对

    该方法返回自身(不含继承)的所有可枚举(enumerable)属性的键值对;

    Object.entries(obj) // obj
    

    该方法返回由键值对组成的数组;

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. sing: function() {
    5. console.log('he can sing ~');
    6. }
    7. }
    8. console.log(Object.entries(obj1)); // [ ['name', '小明'], ['age', 13], ['sing', ƒ] ]

     obj.hasOwnProperty()判断对象上是否存在某自有属性

    该方法用于判断对象obj自身属性中是否具有指定的属性,返回布尔值

    obj.hasOwnProperty(prop)

    所传参数为某属性

    1. var obj1 = {
    2. name: '小明',
    3. age: 13,
    4. intro: function() {
    5. console.log(`my name is ${this.name}`);
    6. }
    7. }
    8. var obj2 = {}
    9. Object.setPrototypeOf(obj2, obj1)
    10. console.log(obj1.hasOwnProperty('name')); // true
    11. console.log(obj2.hasOwnProperty('name')); // false

    prototypeObj.isPrototypeOf()判断某对象是否在另一个对象的原型链上

    该方法用于测试一个对象是否存在于另一个对象的原型链上,返回布尔值

    prototypeObj.isPrototypeOf(object)

    其中object是要测试的目标对象,prototypeObj是另一个对象的原型链;

    1. var o = {};
    2. function Person(){
    3. };
    4. var p1 = new Person(); //继承自Person原来的原型Person.prototype
    5. Person.prototype = o;
    6. var p2 = new Person(); //继承自o
    7. console.log(o.isPrototypeOf(p1)); // false o是不是p1的原型
    8. console.log(o.isPrototypeof(p2)); // true o是不是p2的原型
    9. console.log(Object.prototype.isPrototypeOf(p1)); // true
    10. console.log(Object.prototype.isPrototypeOf(p2)); // true
    11. // p1的原型链结构是p1 => 原来的Person.prototype => Object.prototype => `null``
    12. // p2的原型链结构是p2 => o => Object.prototype => null
    13. // p1和p2都拥有Object.prototype, 他们都在Object.Prototype的原型链上

  • 相关阅读:
    apifox 针对测试使用教程(持续更新)
    Vue项目前期准备工作
    Java -- 每日一问:String、StringBuffer、StringBuilder有什么区别?
    leetcode:2427. 公因子的数目(python3解法)
    史上最强,Jmeter性能测试-性能场景设计实例(详全)
    python中不同进制的表示方法及进制转化
    统一网关Gateway
    u盘中删除的文件怎样才能恢复呢?
    第03篇: 手写JavaRPC框架之搞定序列化
    systemverilog function的一点小case
  • 原文地址:https://blog.csdn.net/ks795820/article/details/128027657