var foo = 'name' var obj = { foo:'恭迎夷陵老祖', name:'魏无羡' } obj.foo //恭迎夷陵老祖 obj['foo'] //恭迎夷陵老祖 obj[foo] //魏无羡
Object.keys(obj) // ['foo','name']
点运算符 和方括号运算符 都可以获取对象的属性值。不同的是 方括号运算符 在获取对象的属性值时要加引号,如果不加引号 会被当做变量处理。
属性的查看:Object.keys()
方法。
属性的删除:delete
var obj = { p: 1 }; Object.keys(obj) // ["p"] delete obj.p // true obj.p // undefined Object.keys(obj) // []
delete 删除对象的属性,删除成功后返回true。如果删除一个不存在的属性,不会报错,返回true。
var obj ={} deleter obj.p //true
只有当该属性存在,且不得删除时才返回false,另外,
delete只能删除自身的属性,不能删除继承的属性,但是仍然会返回true,只是不能删除。
var obj = {}; delete obj.toString // true obj.toString // function toString() { [native code] }
属性是否存在 :in运算符
in
运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true
,否则返回false
。它的左边是一个字符串(要用引号包裹),表示属性名,右边是一个对象。
它不能识别哪些属性是对象自身的,哪些属性是继承的。
var obj = { p:'123' } 'p' in obj //true 'toString' in obj //true
hasOwnProperty 可以识别哪些属性是自身的
obj.hasOwnProperty('toString') // false obj.hasOwnProperty('p') // true
属性的遍历 for...in
var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log('键名:', i); console.log('键值:', obj[i]); } // 键名: a // 键值: 1 // 键名: b // 键值: 2 // 键名: c // 键值: 3
- 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
- 它不仅遍历对象自身的属性,还遍历继承的属性。
所以我们在使用遍历时与hasOwnProperty
方法结合,判断它是否是自身的属性。
var person = { name:'魏无羡' } for(var p in person){ if(person.hasOwnProperty(p)){ console.log(p) // name } }