所以在另一个答案中 (How can I create a two dimensional array in JavaScript?) 我看到了以下
function createArray(length) {
var arr = new Array(length || 0),
i = length;
if (arguments.length > 1) {
var args = Array.prototype.slice.call(arguments, 1);
while(i--) arr[length-1 - i] = createArray.apply(this, args);
}
return arr;
}
createArray(); // [] or new Array()
createArray(2); // new Array(2)
createArray(3, 2); // [new Array(2),
// new Array(2),
// new Array(2)]
这是什么意思:
var arr = new Array(length || 0),
i = length;
我感到困惑的两个部分是length || 0
,逗号的使用后跟i = length
。
对于length || 0
我做了一些实验而且我很困惑。
这里是一个JSFiddle,在那里我尝试使用变量length
,然后使用变量blah
完全相同的东西,只在第二个上得到错误:https://jsfiddle.net/vrp0uhtL/4/你需要进入调试器。我只在chrome上测试了这个。
对于,i = length
,这只是将i
声明为同一行的var的简写吗?
谢谢
编辑: 因为我发现了一些奇怪的事情,并将这个问题与其他问题区分开来: 为什么会这样:
var arr = new Array(length || 0)
console.log(arr)
var arr2 = new Array(blah || 0)
console.log(arr2)
只会在第二个上产生错误,在其他地方既没有定义长度也没有定义;更具体地说,为什么长度总是具有值0,即使我没有定义它(参见上面的JSFiddle)
答案 0 :(得分:1)
在JS中,如果您在||
之类的作业操作中看到x = a || b
,则表示x
将设置为值a
,只要< / em> a
已定义,否则将设置为b
。
答案 1 :(得分:0)
new Array(length || 0)
表示您使用给定参数创建一个新数组,如果未定义,则它将是一个长度为零的数组。逗号分隔变量声明只是一种定义变量的方法,而不需要为每个变量使用新行。
答案 2 :(得分:0)
这里发生的是有问题的代码是检查是否有值传递给长度变量。如果有值,那么它将使用该值来设置新数组的长度和函数内的长度var。如果没有,它将创建一个新的数组0.
函数执行此操作的原因是因为能够向此函数发送多个参数。在该示例中,您可以看到可以使用一个或多个参数调用此函数:createArray(3),createArray(3,2)。 ||行中的运算符
var arr = new Array(length || 0)
将检查您是否仍有长度值。如果您已到达参数的末尾,则最后一个长度将是未定义的,并且将生成一个0长度的新数组,这将告诉函数停止生成数组。
在许多编程语言中,您可以在同一行声明多个相同类型的变量,用逗号分隔:
int a = 0, b = 1;
var text, input;
答案 3 :(得分:0)
length || 0
此表达式的计算结果为 length ,如果 length varbile已定义,否则 0 请参阅此处{{3} }
var a, b,c
此处的解释short-circuit evaluation