数组初始值设定项中有多个逗号的意外结果

时间:2017-07-31 09:57:34

标签: javascript

var a = [,,,];
var b = new Array(3);
0 in a     //  true??
0 in b     //  false

当我在浏览器中尝试此代码时,结果并不是我所期望的。 0 in a的结果是false

我认为a = [,,,]a = [undefined,undefined,undefined]不一样, 它与a = new Array(3)相同。我对吗?这是正确的结果是什么?

1 个答案:

答案 0 :(得分:0)

  

这是正确的结果是什么?

正确的结果是Sub CreateTable() Dim bf As Boolean Dim aTable(), aRes() Dim i As Long, k As Long, n As Long With Worksheets("DOHADNÉ POLOŽKY") ' List s tabulkou, kde se hleda i = .Cells(.Rows.Count, "A").End(xlUp).row aTable = .Range("A1:P" & i).Value ' tabulka do pole ReDim aRes(1 To i + 1, 1 To 1) ' velikost pole End With For i = 1 To UBound(aTable) ' od 1 do poctu radky tabulky If aTable(i, 1) <> Empty Then ' kdyz neni prazdna If aTable(i, 4) = "Depo" And aTable(i, 8) = "CZK" Then aTable(i, 12) = aRes(i, 1): i = i + 1 End If End If Next i ' upload vysledku na list do sloupce J Worksheets("List1").Range("A1").Resize(UBound(aRes), 1).Value = aRes Range("A1").Select ActiveCell.FormulaR1C1 = "KUK" End Sub 0 in a,因为false没有关键a的条目,因为"0"没有根本没有任何条目。 a&#39; a为3,但其中没有条目。

  

我认为lengtha = [,,,]

不同

正确,不是。

  

...它与a = [undefined,undefined,undefined]

相同

正确。

这由数组初始值设定项的the runtime semantics决定。如果在数组初始值设定项中有 elision ,则它不会在数组中创建条目,但 会对数组的长度做出贡献。阵列是一个&#34;稀疏&#34;数组(带间隙的数组)。

让我们分解一下:

a = new Array(3)

首先要注意的是, end 处的var a = [ /* blank space where entry 0 would be */, /* blank space where entry 1 would be */, /* blank space where entry 2 would be */, /* this isn't a blank space, a single trailing comma is ignored */ ]; 会被忽略,因为数组初始值设定项中的单个尾随逗号始终会被忽略。这留下了一个包含三个空格的数组,因此长度为,

这是一个没有潜在混淆的最终3的例子:

&#13;
&#13;
,
&#13;
&#13;
&#13;

var a = [1,,,4]; console.log(0 in a); // true, `a` has an entry at 0 console.log(1 in a); // false, `a` has no entry at 1 console.log(2 in a); // false, `a` has no entry at 2 console.log(3 in a); // true, `a` has an entry at 3 console.log(a.length); // 4之间的空格正是:空格。它们与,不同。