【问题标题】:How do I check if a string/array/object exists in Javascript? [duplicate]如何检查 Javascript 中是否存在字符串/数组/对象? [复制]
【发布时间】:2013-05-20 12:42:39
【问题描述】:

我有一个对 php 函数的 ajax 调用,该函数可以返回一个字符串、一个数组、一个对象或什么都没有。 (是的,我知道将其标准化是理想的,因此只有一种可能的返回类型,但它是我们的首席开发人员选择的第三方库,我无法更改。)有没有简单的方法我可以测试看看它是否存在?我试过这个:

function doSomething(data)  //data is what's returned by a previous ajax call
     if(data.unavailableItems) {
        // do something
     }
}

但即使unavailableItems 元素在进入函数的数据数组中不存在,它也会命中do something。我知道我一定遗漏了一些非常明显的东西,但我这辈子都找不到。

这是一个进入函数的数据示例;如您所见,没有名为unavailableItems的元素:

【问题讨论】:

  • 你能给每个返回类型的“数据”一个例子吗?我认为data 是由您的 ajax 框架解析的,或者是在它传递到这个函数之前。
  • @NickSlash - 上面显示的是 Firefox 的屏幕截图 - 这是帖子返回的 json。

标签: javascript


【解决方案1】:
if(data != void(0) && data.unavailableItems != void(0)){
  //exists
}

正如诺曼在 cmets 中指出的那样......你应该结帐what void 0 means

【讨论】:

  • 你也可以不带括号使用data != void 0
  • @TravisJ 酷!我不知道这是有效的。我不是 JS 大佬,谢谢。
  • 有关 void(0) 或 void 0 的更多信息,请查看另一个很棒的 SO 问题 - stackoverflow.com/questions/1291942/…
  • 我试过这个,它仍然进入 if 语句。
【解决方案2】:

用于检查对象是否包含属性的好工具是obj.hasOwnProperty(prop)

if(data.hasOwnProperty("unavailableItems")){

}

另请注意,John Resig 提供了一个垫片,地址为obj.hasOwnProperty

function hasOwnProperty(obj, prop) {
 var proto = obj.__proto__ || obj.constructor.prototype;
 return (prop in obj) &&
    (!(prop in proto) || proto[prop] !== obj[prop]);
}

if ( Object.prototype.hasOwnProperty ) {
 var hasOwnProperty = function(obj, prop) {
    return obj.hasOwnProperty(prop);
 }
}

【讨论】:

  • @EmmyS - 回复:IE8 约束。我知道了。然后检查 void 0 可能是你最好的选择(正如 Aidanc 建议的那样)
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 2022-01-03
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
相关资源
最近更新 更多