.hasOwnProperty()
不检查继承的成员,in
运算符不适用于所有类型的对象(例如字符串和null
)
欢迎使用库(尤其是Lodash.js)的解决方案。
我正在编写一个函数,它试图找出一个对象是否类似于数组(包括字符串)。我无法直接与.hasOwnProperty()
核对,因为属性可以继承:
function isArrayLike(val) {
return 'length' in Object(val)
}
另一个例子:
function stringify(val) {
if ('toJSON' in Object(val))
return JSON.stringify(val.toJSON())
else
return JSON.stringify(val)
}
so(如果参数是原语,'toJSON' in Object(val)
不会中断)
prop in Object(val)
似乎很有效
答案 0 :(得分:3)
实际上,in
operator仅适用于对象:
如果Type( rval )不是Object,则抛出 TypeError 异常。
因此,只需检查它确实是一个对象:
obj === Object(obj) // Filter out non-objects
&& prop in obj // Check property
请注意,布尔值,数字,字符串和符号是原始值,因此它们没有属性。但是,它可能看起来相反,例如"string".valueOf
。这是有效的,因为在底层创建了一个字符串对象,该对象继承了valueOf
的{{1}}属性。
如果您想测试此项,可以使用
String.prototype