这有什么问题:
var zipCodes =(['90001','90002','90003']);
测试数组zipCodes
if('90001' in zipCodes) {
alert('True');
};
答案 0 :(得分:11)
in
运算符查看属性名称,而不是值。
因为它是一个数组,所以属性名称将是数组的索引。
如果您只支持现代环境,则可以使用Array.prototype.indexOf()
。
if(zipCodes.indexOf('90001') > -1) {
如果您需要支持没有.indexOf()
的环境,则可以实施the MDN fix。
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this === void 0 || this === null) throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) return -1;
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
if (n !== n) // shortcut for verifying if it's NaN
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len) return -1;
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) return k;
}
return -1;
};
}
答案 1 :(得分:4)
如果要检查数组是否包含给定值,可以使用indexOf方法检查项目的位置。如果在数组中找不到该项,则返回-1:
var zipCodes =(['90001','90002','90003']);
zipCodes.indexOf('90001') // 0
zipCodes.indexOf('90002') // 1
zipCodes.indexOf('90003') // 2
zipCodes.indexOf('90004') // -1
if(zipCodes.indexOf('90001') != -1) {
alert('True');
};
在http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
了解详情答案 2 :(得分:3)
改为使用对象。如果您正在尝试使用数组,那么对象是一种更有效的查找列表方式。
var zipCodes = {"90001": true, "90002": true, "90003": true};
if ('90001' in zipCodes) {
alert('True');
}
jsfiddle在这里看到它的工作原理:http://jsfiddle.net/jfriend00/ZNGTq/
答案 3 :(得分:2)
你需要这样的东西:
var zipCodes =(['90001','90002','90003']);
if (zipCodes.has('90001')) {
....
}
Array.prototype.has=function(v){
for (i=0;i<this.length;i++){
if (this[i]==v) return i;
}
return false;
}
有关详细信息,请参阅此处:
http://snook.ca/archives/javascript/testing_for_a_v
...
答案 4 :(得分:0)
因为in
检查对象的属性。检查一下,将“in object”转换为“in array”:Testing for a Value in JavaScript Array