jsはそれを列挙できるかどうかを判断します

列挙とは、オブジェクト内のプロパティをトラバースできるかどうか、簡単に言えば、プロパティを一覧表示できるかどうかを指します。

1.列挙可能なプロパティの影響かどうか

for ... inは、独自の列挙可能なプロパティをトラバースします。プロトタイプから継承された
Object.keys Object.keysは、独自の列挙可能なプロパティをトラバースします。JSON.stringifyは、独自の列挙可能なプロパティを
文字列化します。

function Person() {
    
    
    this.name = "小明"
};
Person.prototype = {
    
    
    hobby: "打球",
};

var person = new Person();
Object.defineProperty(person, "age", {
    
    
    value: 18,
    enumerable: false
});

// for...in,遍历自身的和原型上继承的可枚举属性
for(var keys in person){
    
    
    console.log(keys);  // name,hobby
}

// Object.keys,遍历自身可枚举属性
console.log(Object.keys(person));  //["name"]

// JSON.stringify,字符串自身可枚举属性
console.log(JSON.stringify(person));    //{"name":"小明"}
  
console.log(Object.assign({
    
    },person));   //{name: "小明"}

2.列挙可能かどうかの判断方法

各オブジェクトにはpropertyIsEnumerable()メソッドがあり、このメソッドは、指定されたプロパティが列挙可能かどうかを判別できます。
使用法:obj.propertyIsEnumerable( "property name");

console.log(person.propertyIsEnumerable('name')); //true
console.log(person.propertyIsEnumerable('age'));//false
console.log(person.propertyIsEnumerable('hobby'));//false

3.まとめ

for ... inループは、プロトタイプチェーンの列挙可能なプロパティを含む、オブジェクトのすべての列挙可能なプロパティをトラバースします
。Object.keys()は、プロトタイプチェーンのプロパティの列挙可能なプロパティではなく、独自の列挙可能なプロパティのみをトラバースします。 for ... inとObject.keys();の主な違い
Object.getOwnPropertyNames()は、プロトタイプチェーン上のプロパティを除いて、それ自体のすべてのプロパティ(列挙可能かどうかに関係なく)をトラバースします。

おすすめ

転載: blog.csdn.net/m0_48076809/article/details/109243759