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 )
判断一个对象是否被冻结。(不可扩展的对象,属性改为不可配置都是冻结)
网友评论