使用 hasOwnProperty 时无法将 null 或 undefined 转换为对象
Cannot convert null or undefined to object when using hasOwnProperty
我正在尝试以更优雅的方式使用 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
作为 shorthand 传递(这应该有效)时,它的行为并不符合我的预期。
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);
a
、b
和 bamboo
都记录到控制台,所以我知道它正在正确传递参数。
为什么 hasOwnProperty
的行为无法正常工作?
为了正确的回调,您需要 bind 将对象 hasOwnProperty
然后使用返回的函数。
var obj = {
a: 2,
b: 7,
bamboo: 22
},
keys = Object.keys(obj).filter({}.hasOwnProperty.bind(obj));
console.log(keys);
<em>object</em>.hasOwnProperty
将对象作为其 this
值。当您进行直接调用时,这是通过查看调用该方法的对象 on 隐式提供的,但是对于间接调用,您必须手动指定 this
:
var obj = { foo: 3 };
var func = obj.hasOwnProperty;
console.log(func('foo')); // TypeError: Cannot convert undefined or null to object
最简单的方法之一是使用 <em>function</em>.bind
,如下所示:
var obj = { foo: 3 };
var func = obj.hasOwnProperty.bind(obj); // bind `this` of function to `obj`
console.log(func('foo')); // = true
我正在尝试以更优雅的方式使用 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
作为 shorthand 传递(这应该有效)时,它的行为并不符合我的预期。
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);
a
、b
和 bamboo
都记录到控制台,所以我知道它正在正确传递参数。
为什么 hasOwnProperty
的行为无法正常工作?
为了正确的回调,您需要 bind 将对象 hasOwnProperty
然后使用返回的函数。
var obj = {
a: 2,
b: 7,
bamboo: 22
},
keys = Object.keys(obj).filter({}.hasOwnProperty.bind(obj));
console.log(keys);
<em>object</em>.hasOwnProperty
将对象作为其 this
值。当您进行直接调用时,这是通过查看调用该方法的对象 on 隐式提供的,但是对于间接调用,您必须手动指定 this
:
var obj = { foo: 3 };
var func = obj.hasOwnProperty;
console.log(func('foo')); // TypeError: Cannot convert undefined or null to object
最简单的方法之一是使用 <em>function</em>.bind
,如下所示:
var obj = { foo: 3 };
var func = obj.hasOwnProperty.bind(obj); // bind `this` of function to `obj`
console.log(func('foo')); // = true