ECMAScript5下,可以为对象定义隐藏属性
这样定义的属性不可枚举,故不出现在序列化结果中。
在网站开发应用中,方便避免将隐藏属性序列在数据中发送给服务器
a={x:1}
a["y"]=2;//添加非隐藏属性y
JSON.stringify(a) //{"a":1,"y",2}
Object.defineProperty(a,"z",{"value":3,enumerable:false,writeable:true,configurable:true})
console.log(a.z) //3
JSON.stringify(a) //{"a":1,"y",2}
如果某个属性已经存在并且是非隐藏的,某个时候想把它变成隐藏属性怎么办?
先保留住原来的值,删除这个属性,最后重新赋值即可:
var _val = obj.attr;
delete obj.attr
Object.defineProperty(obj, attr, {
value : _val,
configurable : true,
writable : true
});
其他的将该属性赋值成 null 或undefined的都不可以,因为这个属性已经存在,无法改变其隐藏性。
effevo技术团队出品 (https://effevo.com)