Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用hasOwnProperty时无法将null或undefined转换为object_Javascript_Lambda_Anonymous Function_Hasownproperty - Fatal编程技术网

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);