Javascript的Object探究

来源:互联网 发布:视频检索软件 编辑:程序博客网 时间:2024/04/30 12:24

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); //trueObject.is(1,'1');//falsevar a = {c:1}, b={c:1}; Object.is(a,b);//falseb=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); //trueObject.isSealed({a:1});//falseobj.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}
0 0