深入理解JavaScript对象属性
创建JavaScript的对象,可以通过对象.属性名获取值,也可以通过对象['key']
获取内容。
使用对象['key']
,传入的内容都会被转换为字符串值。
var obj = { a: 'test', b: 'test2' }; obj.a; //test obj['b'];//test2
属性读写
var obj = { a: 'test', b: 'test2' }; obj.a; //test obj['b'];//test2
属性异常
如果读取没有的属性,通常会返回undefined,如果二维值的话,会报错。
console.log(obj.z);//undefined console.log(obj.z.b);//Uncaught TypeError: Cannot read property 'b' of undefined obj.y.z = 2; // TypeError: Cannot set property 'z' of undefined //可以通过判断是否存在 if (obj.y) { //存在的话则执行 }
属性枚举
var key; for (key in obj) { console.log(obj[key]); }
属性删除
使用delete关键字
delete obj.a;//true obj.a; // undefined
如果这个属性设置过configurable为true,则不能删除。
默认创建的属性,configurable为false。下面讲如何设置为true。
不能删除全局变量
var globalVal = 1; delete globalVal; // false
不能删除函数
function fd() {} delete fd; // false
可以删除Window上的变量
ohNo = 1; window.ohNo; // 1 delete ohNo; // true
属性检测
判断是否存在这个属性
var obj = { a: 'test', b: 'test2' }; 'a' in obj;//true 'toString' in obj //true
在原型链上的值也可以被检测到。
例如所有对象上都有toString属性.
每个属性都有一个属性:enumerable,是否可以被检测,默认为true,如果为false,则检测不到这个属性,不能遍历。
var obj = { a: 'test', b: 'test2' }; Object.defineProperty(obj, 'price', { enumerable: false, value: 1000 }); var key; for (key in obj) { console.log(obj[key]) } //只输出test和test2
判断这个属性可否被枚举,true 可以,false不能
obj.propertyIsEnumerable('price');
设置属性的属性
版权声明:
作者:applek
链接:http://www.lovestu.com/srljjsdxsx.html
文章版权归作者所有,未经允许请勿转载。
THE END