3

hasOwnPropertyよりエレガントな方法で使用しようとしています。

私はここにこのコードを持っています。

var obj = {
    a: 2,
    b: 7,
    bamboo: 22
};

var keys = Object.keys(obj).filter(key => obj.hasOwnProperty(key));

// keys: [ "a", "b", "bamboo" ]

ただし、省略形として渡そうとするとobj.hasOwnProperty(これは機能するはずです)、期待どおりに動作しません。

var keys = Object.keys(obj).filter(obj.hasOwnProperty);

// Uncaught TypeError: Cannot convert undefined or null to object
//     at hasOwnProperty (<anonymous>)

パラメータが正しく渡されることを確認するために、次のhasOwnPropertyテスト ケースを設定しました。

var testFilter = (key) => {
    console.log(key);
    return true;
};

Object.keys(x).filter(testFilter);

abおよびbambooすべてがコンソールに記録されるため、パラメーターが正しく渡されていることがわかります。

の動作が正しく機能しないのはなぜhasOwnPropertyですか?

4

2 に答える 2