Object.keys(object)
获取一个对象的所有key
var obj = {a:1, b:2, 'hello':'world'};
var keys = Object.keys(obj); //['a','b','hello']
Object.is(value1, value2)
比较两个对象或者值是否是同一个, 和===等价
Object.is(1,1); //true
Object.is(1,'1');//false
var a = {c:1}, b={c:1};
Object.is(a,b);//false
b=a;
Object.is(a,b);//true
Object.seal(obj)与Object.isSealed(obj)
Object.seal密封对象的属性,使对象增加或者删除属性无效,但是可以修改属性值。不过这个方法不能密封对象的子对象。
Object.isSealed判断一个对象是否被密封
var obj = {a:1,b:2,c:{d:3}};
Object.seal(obj);//obj={a:1,b:2,c:{d:3}};
obj.d = 4; //obj={a:1,b:2,c:{d:3}};
obj.a = 5; //obj={a:5,b:2,c:{d:3}};
Object.isSealed(obj); //true
Object.isSealed({a:1});//false
obj.c.e=10;//obj={a:5,b:2,c:{d:3,e:10}};
Object.freeze(obj)
冻结对象,使对象的属性值不能修改,也不能给对象增删属性。和Object.seal()一样,这个方法不能冻结对象的子对象。
Object.defineProperty(object, keyname, config)
定义对象的属性
config.enumerable 属性是否可以枚举。如果config.enumerable为false, 则Object.keys(object)取不到该key,for(var prop in object){}也取不到该key。
config.configurable 属性是否可以删除。如果config.configurable为false,则无法删除该属性。
config.writable 该属性的值是否可以改变。如果config.writable为false, 则改变该属性的值无效。
var obj = {};
var arr = [
[true, true, true],
[true, true, false],
[true, false, true],
[true, false, false],
[false, true, true],
[false, true, false],
[false, false, true],
[false, false, false]
];
arr.map(function(item, index) {
Object.defineProperty(obj, 'k'+index, {
value: index + 1,
enumerable: item[0],//不能用Object.keys()或者for(var .. in ..)获得key名称
configurable: item[1],//key不能被删除
writable: item[2]//不能修改值
});
});
console.log(obj);//{k0:1,k1:2,k2:3,k3:4,k4:5,k5:6,k6:7,k7:8}
console.log(Object.keys(obj));//["k0", "k1", "k2", "k3"]
[0,1,2,3,4,5,6,7].map(function(i){
var k = 'k'+i;
obj[k] += 1000;
});
console.log(obj);//{k0:1001,k1:2,k2:1003,k3:4,k4:1005,k5:6,k6:1007,k7:8}
[0,1,2,3,4,5,6,7].map(function(i){
var k = 'k'+i;
delete obj[k];
});
console.log(obj);//{k2: 1003, k3: 4, k6: 1007, k7: 8}