如何检查 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 预定义数组中存在的子字符串?