JS獲取物件屬性名總結
阿新 • • 發佈:2022-01-31
最近面試遇到問如何獲取物件全部屬性名的方法,總結一下:
物件屬性型別分類:
1.ESMAScript分類
資料型別 又分為可列舉和不可列舉型別 訪問器型別
2.上下文分類
原型屬性 例項屬性
1.列舉自身但不bhhHrVfPvJ包括原型的可列舉屬性名 Object.keys(obj)
// 遍歷物件 function Person(name,age) { this.name = name; this.age = age; } Person.prototype.demo = function() {}; let cj = new Person('cj',25); // 通過Object.defineProperty定義一個不可列舉屬性 Object.defineProperty(cj,'weight',{ enumerable:false }) // enumerable = true // console.log(Object.keys(cj)) // name age // enumerable = false // console.log(Object.keys(cj)) // name age weight
2.列舉包括自身不可列舉www.cppcns.com但不包括原型的屬性名 Object.getOwnPropertyNames(obj)
function Person(name,age) { this.name = name; this.age = age; } // 設定原型屬性 Person.prototype.demo = function() {}; let cj = new Person('cj',{ enumerable:false }) // 獲取屬性名 console.log(Object.getOwnPropertyNames(cj)) // name age weight
3.獲取自身和原型鏈上的可列舉屬性 for in 返回的順序可能與定義順序不一致
function Person(name,age) { this.name = name; this.age = age; } // 設定原型屬性 Person.prototype.demo = function() {}; Object.prototype.j = 1 let cj = new Person('cj',{ enumerable:false }) let props = [] for(prop in cj){ props.push(prop) } console.log(props) //name age weight j
4.獲取自身Symbol屬性 Object.getOwnPropewww.cppcns.comrtySymbols(obj)
let obj = {}; // 為物件本身新增Symbol屬性名 let a = Symbol("a"); obj[a] = "localSymbol"; // 為物件原型新增Symbol屬性名 let b = Symbol("b") Object.prototype[b] = 111 let objectSymbols = Object.getOwnPropertySymbols(obj); console.log(objectSymbols); //Symbol(a)
5.獲取自身包括不可列舉和Symbol屬性名,但不包括原型 Reflect.ownKeys(obj)
// 遍歷物件
function Person(name,age) {
this.name = name;
this.age = age;
}
Person.prototype.demo = function() {};
let s = Symbol('s')
let cj = new Person('cj',25);
// 通過Object.bhhHrVfPvJdefineProperty定義一個不可列舉屬性
Object.defineProperty(cj,{
enumerable: false
})
cj[s] = 1
let a = Symbol('a')
Object.prototype[a] = 1
console.log(Object.getOwnPropertyNames(cj)) //name age weight
console.log(Reflect.ownKeys(cj)) //name age weight Symbol(s)
更多關於獲取物件屬性名的使用小技巧請檢視下面的相關連結