我试图在JS中解决数组问题.我的问题是; 以下两个测试是否相同?
var test = 2;
console.log(test in [1,2,3]);
console.log([1,2,3].indexOf(test) != -1);
Run Code Online (Sandbox Code Playgroud)
他们似乎是,但后来回答像这样与本书我读建议你不能做in一个阵列上,只有一个对象.寻找清晰度.必须有一个人们使用的原因.indexOf(x)(我假设是线性时间)而不是in(我假设是恒定时间).
不,他们完全不同.
test in [1,2,3]检查对象中是否存在命名 2的属性.有它,它有价值3.
[1,2,3].indexOf(test)获取具有值 的第一个属性2(位于名为的属性中1)
建议你不能在一个数组上,只在一个对象上
数组是对象.(如果我们想要在末尾使用经典的OO,那么这是一个子类,它不适合像JS这样的原型语言,但它可以解决这个问题).
该阵列[1, 2, 3]是类似的对象{ "0": 1, "1": 2, "2": 3 }(但来自Array构造继承一束其它性质的).