我如何确定一个对象x是否具有定义的属性y,而不管x.y的值是多少?
我正在使用
if (typeof(x.y) !== 'undefined')
但这似乎有点笨拙。有没有更好的办法?
我如何确定一个对象x是否具有定义的属性y,而不管x.y的值是多少?
我正在使用
if (typeof(x.y) !== 'undefined')
但这似乎有点笨拙。有没有更好的办法?
当前回答
你可以像这样修剪一下:
if ( x.y !== undefined ) ...
其他回答
如果你想知道对象物理上是否包含属性@gnarf的答案使用hasOwnProperty将完成工作。
如果你想知道属性是否存在,无论是在对象本身上还是在原型链上,你可以使用in操作符。
if ('prop' in obj) {
// ...
}
Eg.:
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
下划线。js或Lodash
if (_.has(x, "y")) ...
:)
ES6 +:
ES6+有一个新功能,你可以像下面这样检查:
if (x?.y)
实际上,解释器检查x的存在,然后调用y,因为在if括号内,强制发生,x?Y转换为布尔值。
既然问题是关于属性检查的笨拙,一个常规的用例是函数参数选项对象的验证,我认为我应该提到一种无库的测试多个属性是否存在的简短方法。 免责声明:它确实需要ECMAScript 5(但在我看来,任何仍在使用IE8的人都应该拥有一个破碎的网络)。
function f(opts) {
if(!["req1","req2"].every(opts.hasOwnProperty, opts)) {
throw new Error("IllegalArgumentException");
}
alert("ok");
}
f({req1: 123}); // error
f({req1: 123, req2: 456}); // ok
为什么不简单地:
if (typeof myObject.myProperty == "undefined") alert("myProperty is not defined!");
或者如果你想要一个特定的类型:
if (typeof myObject.myProperty != "string") alert("myProperty has wrong type or does not exist!");