摘要:所以說(shuō)遍歷屬性時(shí),要考慮這兩個(gè)因素。開(kāi)始遍歷先定義兩個(gè)類吧和,后者繼承前者。然后再聲明并初始化一個(gè)的實(shí)例。
原文鏈接
參考JavaScript 中遍歷對(duì)象的屬性
概述JavaScript中的屬性:如何遍歷屬性
《JavaScript 高級(jí)程序設(shè)計(jì)》
遍歷 JavaScript 對(duì)象中的屬性沒(méi)有其他語(yǔ)言那么簡(jiǎn)單,因?yàn)閮蓚€(gè)因素會(huì)影響屬性的遍歷:對(duì)象屬性的屬性描述符 (property descriptor) 的 [[Enumerable]] 特性為 true (可枚舉)才能被 for-in 訪問(wèn);如果在對(duì)象本身沒(méi)有找到屬性,接下來(lái)會(huì)在原型鏈上查找,訪問(wèn)屬性時(shí)會(huì)沿著整個(gè)原型鏈從下到上查找屬性。所以說(shuō)遍歷屬性時(shí),要考慮這兩個(gè)因素。
開(kāi)始遍歷先定義兩個(gè)類吧:Person 和 Student,后者繼承前者。然后再聲明并初始化一個(gè) Student 的實(shí)例 p1。其中自身屬性有 grade(可枚舉) 和 tel(不可枚舉),從原型鏈繼承屬性 type.
可枚舉意思是屬性的 [[Enumerable]] 值為 true,自身的屬性意思是 不是 從 原型鏈 繼承的屬性
// ES3 ES5 function Person(name) { this.name = name; } Person.prototype.type = "people"; function Student(name, grade) { Person.call(this, name); this.grade = grade; } if (Object.setPrototypeOf) { Object.setPrototypeOf(Student.prototype, Person.prototype); } else { Student.prototype = Object.create(Person.prototype); Object.defineProperty(Student.prototype, "constructor", { enumerable: false, writable: true, configurable: true, value: Student }); } var p1 = new Student("Zero", "Junior"); Object.defineProperty(p1, "tel", { value: 123456, enumerable: false });
// ES6+ class Person { constructor(name) { this.name = name; } } Person.prototype.type = "people"; class Student extends Person { constructor(name, grade) { super(name); this.grade = grade; } } var p1 = new Student("zero", "Junior"); Object.defineProperty(p1, "tel", { value: 123456, enumerable: false });遍歷可枚舉的、自身的屬性
使用 Object.keys() 或是 for..in + hasOwnProperty()
// Object.keys()返回可枚舉、自身的屬性 // 再用for..of對(duì)返回的數(shù)組進(jìn)行遍歷 for (let prop of Object.keys(p1)){ console.log(prop); }
// 得到可枚舉、自身+繼承的屬性 for (let prop in p1) { // 過(guò)濾繼承屬性 if (p1.hasOwnProperty(prop)) { console.log(prop); } }
結(jié)果是:name 和 grade 屬性
注: Object.keys() 的使用環(huán)境是 ES5+
// 使用 `Object.getOwnPropertyNames()` for (let prop of Object.getOwnPropertyNames(p1)) { console.log(prop); }
結(jié)果是:name 、 grade 和 tel 屬性
遍歷可枚舉的、自身+繼承的屬性// 使用 `for..in` for (let prop in p1) { console.log(prop); }
結(jié)果是:name 、 grade 和 type 屬性
遍歷所有的、自身+繼承的屬性var getAllPropertyNames = (obj) => { var props = []; do { props = props.concat(Object.getOwnPropertyNames(obj)); } while (obj = Object.getPrototypeOf(obj)); return props; }; for (let prop of getAllPropertyNames(p1)) { console.log(prop); }
結(jié)果很多:包括自身屬性 name 、 grade 等,繼承屬性 type 、 toString 、valueOf 等
EOF
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86431.html
摘要:遍歷對(duì)象的屬性并沒(méi)有像中遍歷一個(gè)那么簡(jiǎn)單,主要原因有以下兩點(diǎn)在中對(duì)象的屬性分為可枚舉與不可枚舉之分他們是由屬性的的值決定的。 javascript遍歷對(duì)象的屬性并沒(méi)有像java中遍歷一個(gè)Map那么簡(jiǎn)單,主要原因有以下兩點(diǎn): 在javascript中對(duì)象的屬性分為可枚舉與不可枚舉之分,他們是由屬性的 enumerable 的值決定的。可枚舉性 決定了這個(gè)屬性是否可以被 for-in ...
摘要:在中,引入了新的循環(huán),即循環(huán)。而且,遍歷數(shù)組元素的順序可能是隨機(jī)的。所以,鑒于以上種種缺陷,我們需要改進(jìn)原先的循環(huán)。總結(jié)一下,循環(huán)有以下幾個(gè)特征這是最簡(jiǎn)潔最直接的遍歷數(shù)組元素的語(yǔ)法。 在ECMAScript5(簡(jiǎn)稱 ES5)中,有三種 for 循環(huán),分別是: 簡(jiǎn)單for循環(huán) for-in forEach 在2015年6月份發(fā)布的ECMAScript6(簡(jiǎn)稱 ES6)中,新增了一種循...
摘要:簡(jiǎn)單說(shuō)就是一個(gè)有一個(gè)函數(shù),這個(gè)函數(shù)執(zhí)行的返回值一定是一個(gè)對(duì)象,對(duì)象有兩個(gè)屬性標(biāo)記迭代是否結(jié)束,標(biāo)記這次迭代的結(jié)果值。 引言 遍歷對(duì)象是平常工作中很常見(jiàn)的一個(gè)操作,幾乎是日常操作,但是遍歷對(duì)象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個(gè)是一個(gè)很常見(jiàn)的用法,相信每個(gè)人順手都可以寫(xiě)出來(lái)。但是這里需要主...
摘要:中可以實(shí)現(xiàn)遍歷的數(shù)據(jù)類型主要是對(duì)象,其中包括普通對(duì)象與數(shù)組。遍歷器是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問(wèn)機(jī)制。實(shí)例五遍歷器對(duì)象實(shí)例五是的遍歷過(guò)程,通過(guò)手動(dòng)調(diào)用其對(duì)象的方法實(shí)現(xiàn)信息獲取。為每個(gè)數(shù)組元素執(zhí)行函數(shù)。 前言 ??將依據(jù)自身痛點(diǎn)學(xué)習(xí),計(jì)劃對(duì)原生JavaScript寫(xiě)一個(gè)系統(tǒng),本文為第一篇,感興趣的同學(xué)可以關(guān)注個(gè)人公眾號(hào):ZeroToOneMe,或者github博客,將持續(xù)...
摘要:和的作用一樣,區(qū)別在于寫(xiě)法語(yǔ)法對(duì)象對(duì)象作用判斷對(duì)象是否在對(duì)象的原型鏈上語(yǔ)法對(duì)象構(gòu)造函數(shù)作用判斷構(gòu)造函數(shù)的屬性是否在對(duì)象的原型鏈上,如果在,就返回屬性是否可枚舉用于檢查給定的屬性是否能夠使用語(yǔ)句。 ## javascript對(duì)象原型成員詳解 ## ECMAScript 中的對(duì)象就是一組數(shù)據(jù)和功能的集合,對(duì)象可以通過(guò) new 操作符后跟要?jiǎng)?chuàng)建的對(duì)象名稱來(lái)...
閱讀 3174·2023-04-25 19:09
閱讀 3885·2021-10-22 09:54
閱讀 1757·2021-09-29 09:35
閱讀 2914·2021-09-08 09:45
閱讀 2255·2021-09-06 15:00
閱讀 2773·2019-08-29 15:32
閱讀 1038·2019-08-28 18:30
閱讀 375·2019-08-26 13:43