gpt4 book ai didi

javascript - 使用 hasOwnProperty 时无法将 null 或 undefined 转换为对象

转载 作者:行者123 更新时间:2023-12-04 01:16:58 24 4
gpt4 key购买 nike

我正在尝试以更优雅的方式使用 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);

abbamboo 都记录到控制台,所以我知道它正在正确传递参数。

为什么 hasOwnProperty 的行为无法正常工作?

最佳答案

<em>object</em>.hasOwnProperty将对象作为其 this值(value)。当您进行直接调用时,这是通过查看 上调用该方法的对象来隐式提供的,但是对于间接调用,您必须指定 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

关于javascript - 使用 hasOwnProperty 时无法将 null 或 undefined 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com