属性の列挙可能性と非列挙性

2141 ワード

MDNで属性のエニュメレート・所有権を検索します.
エニュメレート・属性とは、内部エニュメレート・マーク(enumerable)がtrueに設定された属性であり、自然エニュメレート・属性であるenumerablefalseである.
JavaScriptの基本タイプと基本タイプの小包の対象を見ます. は、非オブジェクトであり、方法がないデータである.JavaScriptには6つの基本的なタイプがあります.string,number,boolean,null,undefined,symbolnull undefinedを除いて、すべての基本的なタイプの値にはこの があります.String Boolean Numberは7つの異なるタイプの値があります.
  • 6種類のSymbolデータタイプ
  • Boolean
  • String
  • Number
  • null
  • undefined
  • Symbol
  • JavaScriptオブジェクト
  • もう一つの概念は です.以下のような字面量があります.
  • 配列の字面量(Aray)
  • ブール文字量(Boolean)
  • 浮動小数点デジタル面量(Float)
  • 整数(Int)
  • オブジェクトの字面量(Object)
  • RegExp
  • 文字列の字面量(String)
  • はい、もういいです.なぜこれらを言いますか?問題を投げました.以上の属性は列挙できますか?
    次の例を見ます.
    function Person() {
        this.name = 'fyflying'
    }
    Person.prototype = {
        hobby: 'coding'
    }
    var person = new Person()
    Object.defineProperty(person, 'sex', {
        value: 'female'
    })
    for (var item in person) {
        console.log(item + ':' + person[item])
    }
    /**
    name:fyflying
    hobby:coding
    **/
    Object.keys(person)
    // ["name"]
    JSON.stringify(person)
    //"{"name":"fyflying"}"
    Object属性を除いて他の全てが巡回されていることが見られ、 を使用することはsexを使用することによって、オブジェクトがプロトタイプチェーンから継承されたエニュメレート・プロパティーを遍歴することにも違いがある.for..inによって定義された属性は、デフォルトはObject.keysであるので、列挙することができず、for...inおよびObject.definePropertyを介して全部巡回していない.
    エニュメレート・属性とエニュメレート・属性の判断方法:false:方法はブール値を返し、指定された自身の属性がエニュメレート・属性であるかどうかを示す.(プロトタイプチェーン継承の属性は含まない)
    違いは以下の方法です.for..in反復を使用して、自身およびプロトタイプチェーン上のエニュメレート・属性を遍歴し、Object.keys()によってフィルタリングすることによって、自身のエニュメレート・属性を遍歴することができ、propertyIsEnumerable()を使用して直接に遍歴した自己エニュメレート・属性からなる行列を使用して、for...inを使用して、自身のエニュメニュメニュメニュメニュメレー
    また、大砂漠の文章の参考として、上記のいくつかの方法について詳しく紹介しました.対象属性の列挙です.