在我测试的浏览器中,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,则该数组乍看起来会包含在该上下文中为undefinedfalse

但是请注意,即使falsetrue在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/

10-12 12:54
查看更多