Javascript 使用hasOwnProperty时无法将null或undefined转换为object
我试图以更优雅的方式使用Javascript 使用hasOwnProperty时无法将null或undefined转换为object,javascript,lambda,anonymous-function,hasownproperty,Javascript,Lambda,Anonymous Function,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作为速记传递时(应该可以),它的行为与我期望的不一
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>)
a
、b
和bambol
都记录到控制台,因此我知道它正在正确传递参数
对于
hasOwnProperty
,该行为为什么不能正常工作?要获得正确的回调,您需要将对象映射到hasOwnProperty
,然后使用返回的函数
var obj={
答:2,,
b:7,
竹子:22
},
keys=Object.keys(obj.filter({}.hasOwnProperty.bind(obj));
控制台日志(键)代码>对象。hasOwnProperty将对象作为其此值。当您进行直接调用时,通过查看调用方法的对象隐式地提供了这一点,但是对于间接调用,您必须手动指定this
:
var obj={foo:3};
var func=obj.hasOwnProperty;
console.log(func('foo'));//TypeError:无法将未定义或null转换为对象
btw,键始终返回作为对象自身属性的属性。
var testFilter = (key) => {
console.log(key);
return true;
};
Object.keys(x).filter(testFilter);