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)
相同。我对吗?这是正确的结果是什么?
答案 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,但其中没有条目。
我认为
不同length
与a = [,,,]
正确,不是。
...它与
相同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;
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
之间的空格正是:空格。它们与,
不同。