JS对象的属性
- js对象的属性有两种类型:字符串类型和Symbol类型。
- 如果使用其他类型的值作为属性时,都会将其转为字符串;如果是对象类型时,会直接转为[object Object]。
var obj = {
['str']: 'String property', // str: "String property"
[Symbol()]: 'Symbol property', // Symbol(): "Symbol property"
[{}]:"Object property", // [object Object]: "Object property"
[undefined]: 'Undefined property', // undefined: "Undefined property"
[null]:'Null property', // null: "Null property"
[[1,2]]:'Array property', // 1,2: "Array property"
}
JS获取对象属性的方法
-
首先定义一个对象
//定义对象
var obj = {
['str']: 'String property',
[Symbol()]: 'Symbol property',
}
//定义不可枚举的字符串属性和Symbol属性
Object.defineProperty(obj, 'unenum', {
value: ' Non-enumerable property',
writable: true,
enumerable: false,
configurable: true,
});
Object.defineProperty(obj, Symbol('unenum'), {
value: 'Non-enumerable Symbol value',
writable: true,
enumerable: false,
configurable: true,
});
//在原型链上定义一个字符串属性和一个Symbol属性
Object.setPrototypeOf(obj, {foo: 'bar', [Symbol('foo')]: 'bar'});
-
Object.keys() & Object.values() & Object.entries
这三个方法都是为了来获得对象的属性与值的,最终返回值是一个数组,不过只获取对象本身的可每枚举字符串属性。
console.log(Object.keys(obj)); //["str"]
console.log(Object.values(obj)); // ["String property"]
console.log(Object.entries(obj)); //[["str", "String property"]]
-
Object.getOwnPropertyNames()
Object.getOwnPropertyNames()是获取对象自身上的字符串属性,包括可枚举的与不可枚举的属性,最后返回一个数组。
console.log(Object.getOwnPropertyNames(obj)); //["str", "unenum"]
-
Object.getOwnPropertySymbols()
Object.getOwnPropertySymbols()是获取对象自身上的Symbol属性,包括可枚举的与不可枚举的,最后返回一个数组。
console.log(Object.getOwnPropertySymbols(obj)); //[Symbol(), Symbol(unenum)]
-
Reflect.ownKeys()
Reflect.ownKeys()是获取对象自身的所有属性,包括可枚举的与不可枚举的,最后返回一个数组。
console.log(Reflect.ownKeys(obj)); //["str", "unenum", Symbol(), Symbol(unenum)]
-
for...in..
for...in...是用来遍历对象上可枚举的字符串属性的,包括原型链上的可枚举的字符串属性。使用for...in...加上obj.hasOwnProperty(prop)就可以实现Object.keys/values/entries的功能。
for(let key in obj){
console.log(key); //"str" "foo"
}
参考文章: JS:获取对象属性有哪些方法?