如何确定对象是否具有JavaScript中的给定属性

2020/10/03 22:21 · javascript ·  · 0评论

我如何确定对象x是否具有定义的属性y,而不管其值如何x.y

我目前正在使用

if (typeof(x.y) !== 'undefined')

但这似乎有些笨拙。有没有更好的办法?

对象具有属性:

如果要测试对象本身(而不是其原型链的一部分)上的属性,则可以使用.hasOwnProperty()

if (x.hasOwnProperty('y')) { 
  // ......
}

对象或其原​​型具有一个属性:

您也可以使用in运算符测试继承的属性。

if ('y' in x) {
  // ......
}

如果您想知道对象是否实际包含属性@gnarf的答案,则hasOwnProperty可以完成工作。

如果您想知道该属性是否存在于对象本身或原型链中的任何位置,则可以使用inoperator

if ('prop' in obj) {
  // ...
}

例如。:

var obj = {};

'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically

Underscore.js或Lodash

if (_.has(x, "y")) ...

:)

您可以像这样修剪一下:

if ( x.y !== undefined ) ...

我原始代码的一个功能

if ( typeof(x.y) != 'undefined' ) ...

在某些情况下可能有用的是使用是否x存在是安全的使用gnarf答案中的任何一种方法,都应首先测试x是否存在疑问。

因此,也许所有这三种方法都可以胜任。

由于问题是关于属性检查的笨拙性,并且一个常规用例是对函数参数选项对象的验证,因此我想提到一种无库测试多种属性存在的简短方法。免责声明:它确实需要ECMAScript 5(但是IMO仍在使用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!");
本文地址:http://javascript.askforanswer.com/ruhequedingduixiangshifoujuyoujavascriptzhongdegeidingshuxing.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!