国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 中遍歷對(duì)象的屬性

Atom / 2011人閱讀

摘要:所以說(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

相關(guān)文章

  • javaScript遍歷對(duì)象屬性

    摘要:遍歷對(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 ...

    liaorio 評(píng)論0 收藏0
  • JavaScript for 循環(huán)

    摘要:在中,引入了新的循環(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)中,新增了一種循...

    chengjianhua 評(píng)論0 收藏0
  • JavaScript對(duì)象遍歷

    摘要:簡(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)。但是這里需要主...

    Seay 評(píng)論0 收藏0
  • JavaScript遍歷

    摘要:中可以實(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ù)...

    ThinkSNS 評(píng)論0 收藏0
  • javascript對(duì)象原型成員詳解

    摘要:和的作用一樣,區(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)...

    zhkai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<