当使用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
作为速记(应该工作)时,它的行为不符合我的期望。
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
的行为不能正常工作?
object.hasOwnProperty
将对象作为其this
值。当您进行直接调用时,这是通过查看方法在上调用的对象来隐式提供的,但是对于间接调用,您必须手动指定this
:
var obj = { foo: 3 };
var func = obj.hasOwnProperty;
console.log(func('foo')); // TypeError: Cannot convert undefined or null to object
最简单的方法之一是使用function.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
},
keys = Object.keys(obj).filter({}.hasOwnProperty.bind(obj));
console.log(keys);
相关文章:
- getElementById 在 Safari 中返回 null 或 undefined
- 为什么是 isFinite(undefined) != isFinite(null)
- 为什么"undefined为null或不是对象”;
- results[0].formatted_address return undefined or null
- javascript中undefined和null的区别是什么,它们的用例是什么
- Angularjs变量undefined、null和empty同时出现
- Undefined vs null in javascript
- 为什么javascript ' var undefined '是OK的,但' var null '抛出错误
- JavaScript Regex匹配返回null或undefined
- Are [object Null] &[object Undefined]有待实现
- 反应.createElement: type不应该是null、undefined、boolean或number.它应该是
- 迭代react元素中的undefined/null对象
- 警告:反应.createElement: type不应该是null、undefined、boolean或number
- 为什么 null==undefined 在 JavaScript 中是正确的
- JavaScript,一种检查嵌套对象属性是否为null/undefined的优雅方式
- In-browser-javascript:在什么情况下.Open返回null/undefined
- Meteor Iron路由器没有'如果数据返回null/undefined,则不调用onBeforeAction
- IE8 Javascript null != undefined
- 浏览器对Javascript中null/undefined简写检查的支持是什么?
- JavaScript在尝试获取数据属性时返回NULL/Undefined