1

for..in ループは、プロパティがオブジェクトのプロトタイプチェーンの属性であるかどうかを気にしないため、すべての属性を出力します。テストをしましょう

var o={};
for(var i in o){
    console.log(o[i]);//  output  none
}

オブジェクト(この方法で作成された:{})はオブジェクトから
のものですが、コードを実行すると、オブジェクトのプロトタイプチェーン
のメソッド(toString)が出力されない理由は、オブジェクトのプロトタイプチェーンメソッド( toString など)が出力されないためです。 ????

4

1 に答える 1

5

toString列挙できません:

("toString" in {}) === true
({}).propertyIsEnumerable("toString") === false

次のように、独自の列挙不可能なプロパティを作成できます。

var object = {};

Object.defineProperty(object, "property", { enumerable: false, value: 5 });

技術的には省略できenumerable: falseます。これがデフォルトであるためです。


これは、ブランケット セクション 15 条項の仕様に示されています。

Functionいずれの場合も、この句で説明されている組み込みオブジェクトの長さプロパティには属性があります{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }この節で説明されている他のすべてのプロパティには、特に指定されてい{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }ない限り、属性があります。

于 2012-04-11T03:27:32.383 に答える