在我测试的浏览器中,var a = new Array(5);
将返回5个undefined
元素组成的数组。由于undefined
等于false
我可以考虑使用false
元素初始化我的数组,只要我以此方式对其进行测试:
if (a[0]) console.log("the element is no longer falsy");
else a[0] = true;
用
Array
值初始化false
是一种安全的方法还是应该避免的黑客行为?编辑:我的目标是像我的示例一样将其初始化为伪造的值。我想确保
new Array()
是这样做的可信赖方法。 最佳答案
当您使用Javascript初始化数组时,它没有任何元素,即,除非您在其中放置任何内容,否则任何位置都不会存在任何内容。您唯一拥有的是将length
设置为您指定的数字。
当您通过读取元素访问元素而没有任何内容时,您会得到undefined
(因为当您访问不存在的对象的成员时会发生)。
但是请注意,根本不存在的元素与设置为undefined
的元素并不完全相同。例如:
var x = new Array(5);
console.log(x[2]); // ==> Output is "undefined"
console.log(x.indexOf(undefined)); // ==> Output is "-1" (not present)
x[2] = undefined;
console.log(x.indexOf(undefined)); // ==> Output now is "2"
如果仅考虑放置在
true
中的元素是否会被视为if
,则该数组乍看起来会包含在该上下文中为undefined
的false
。但是请注意,即使
false
或true
在Javascript中也是一个微妙的概念,尤其是由于自动转换……例如console.log([] ? 1 : 2); // Output is "1", an empty array is "true"
console.log([] == false); // output is "true" (so it's also equal to false!)
关于javascript - 我可以相信新数组中的元素等于false吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14348266/