这个JS语法是什么意思,什么是'长度&#39 ;?

时间:2016-06-28 13:01:28

标签: javascript

所以在另一个答案中 (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)

4 个答案:

答案 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