美文网首页web前端
Object一些常用方法

Object一些常用方法

作者: 六月繁花开 | 来源:发表于2019-01-21 18:20 被阅读8次

1.Object.constructor

    返回创建实例对象的Object构造函数的引用注意,此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串

varo={};o.constructor===Object;//

 truevaro=newObject;o.constructor===Object;// true

functionTree(name){

    this.name=name;

}

var  theTree=newTree("Redwood");

console.log("theTree.constructor is "+theTree.constructor);

结果:

theTree.constructor is functionTree(name){this.name=name;}

2.Object.assign(target, ...sources)

    用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。(将sources 的属性赋予给target,  只会拷贝源对象自身的并且可枚举的属性到目标对象  )

    继承属性和不可枚举属性是不能拷贝的

var obj = Object.create({foo: 1}, { // foo 是个继承属性。

    bar: {

        value: 2  // bar 是个不可枚举属性。

    },

    baz: {

        value: 3,

        enumerable: true  // baz 是个自身可枚举属性。

    }

});

var copy = Object.assign({}, obj);

console.log(copy); // { baz: 3 }

原始类型会被包装为对象

var v1 = "abc";

var v2 = true;

var v3 = 10;

var v4 = Symbol("foo")

var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);

// 原始类型会被包装,null 和 undefined 会被忽略。

// 注意,只有字符串的包装对象(数组也可以)才可能有自身可枚举属性。

console.log(obj); // { "0": "a", "1": "b", "2": "c" }

3.Object.create(proto, [propertiesObject])

用来创建一个新的对象,使用现在的对象来提供新创建的对象的——propto_    

如果propertiesObject没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数

4.Object.defineProperties(obj, props)与Object.defineProperty(obj, 'key', descriptor)

直接在一个对象上定义新的属性或修改现有属性,并返回该对象。数据属性有4个描述内部属性的特性

[[Configurable]]

表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true

[[Enumerable]]

表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true

[[Writable]]

能否修改属性的值,如果直接使用字面量定义对象,默认值为true

[[Value]]

该属性对应的值,默认为undefined

5. Object.entries()

该方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用for...in循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性

constobj={foo:'bar',baz:42};

console.log(Object.entries(obj));// [ ['foo', 'bar'], ['baz', 42] 

6.Object.fromEntries(现在大部分浏览器不支持,火狐63支持)

把键值对列表转换为一个对象

const map=newMap([['foo','bar'],['baz',42]]);

const obj=Object.fromEntries(map);

console.log(obj);// { foo: "bar", baz: 42 }

7.hasOwnProperty()方法会返回一个布尔值            

主要用来判断对象自身属性中是否具有指定的属性 ,该方法会忽略那些从原型链上继续到的属性              

var  obj={};        obj.hasOwnProperty('cc')与Object.proptotype.hasOwnProperty('cc')效果是一样的,都是用来判断obj是否含有属性cc,但是后者会去掉因为obj有hasOwnProperty而出现错误情况 

8.Object.getOwnPropertyDescriptor(obj, prop) 与Object.getOwnPropertyDescriptors(obj)

    返回指定对象上一个自有属性对应的属性描述符,获取当前的某个属性是否可以修改,枚举,删除等

    o={bar:42};

    d=Object.getOwnPropertyDescriptor(o,"bar");

    // d {

    // configurable: true,//是否可通过delete删除此属性,能否修改属性的特性

    // enumerable: true,//是否可以枚举获取(for-in循环或Object.keys()返回属性)

    // value: 42,

    // writable: true,//是否可以修改

    // }

9.Object.getOwnPropertyNames()

    返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组,Object.keys()与for in也可以获取所以的key值(还会获取到原型链上的可枚举属性不过可以使用hasOwnProperty()方法过滤掉)。如果参数不是一个原始对象类型,将抛出一个 TypeError  异常

10.Object.getOwnPropertySymbols() 

方法返回一个给定对象自身的所有 Symbol 属性的数组。

11.Object.isExtensible()

     判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。// 密封对象、 冻结对象也是不可扩展.

12.Object.preventExtensions(empty);

  对象变的不可扩展.也就是永远不能再添加新的属性

13.Object.seal()

    让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可以修改已有属性的值的对象。

14. Object.isSealed

    判断一个对象是否是密封的(sealed)

15.Object.freeze(obj)

  该方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。(但是也是像浅拷贝似的。入如果再深一层,就冻结不了)

const object1 = {

  property1: 42

};

const object2 = Object.freeze(object1);

object2.property1 = 33;

16.Object.isFrozen( obj )

判断一个对象是否被冻结。(不可扩展的对象,属性改为不可配置都是冻结)

相关文章

网友评论

    本文标题:Object一些常用方法

    本文链接:https://www.haomeiwen.com/subject/eiiqjqtx.html