如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]

Posted

技术标签:

【中文标题】如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]【英文标题】: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。 【参考方案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 问题 - ***.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 建议的那样)

以上是关于如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是包含 JavaScript 预定义数组中存在的子字符串?

如何检查 JavaScript 中是不是存在变量?

如何检查 JavaScript 中是不是存在变量?

在 JavaScript 中如何检查 html 元素是不是存在?

如何在javascript中检查数组索引是不是存在?

如何检查javascript中的对象中是不是存在键[重复]