我刚刚玩JavaScript并且遇到了一个简单的程序.
我用JavaScript声明了一个数组
var a = [0, 1, 2];
Run Code Online (Sandbox Code Playgroud)
然后由于JavaScript中的数组没有固定的大小,我们可以向数组中添加更多,我向数组添加了另一个整数.
a[3] = 3;
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,如果我试图访问,a[4]我肯定会得到它undefined.
现在,如果我拿一个数组
var a = [0,1,2];
Run Code Online (Sandbox Code Playgroud)
并添加另一个元素
a[4] = 4;
Run Code Online (Sandbox Code Playgroud)
我故意没有定义a[3],而这也给了我a[3]作为undefined.
这是一个可以观察到的小提琴:http://jsfiddle.net/ZUrvM/
现在,如果我在Java中尝试相同的事情,
int[] a = new int[4];
a[0] = 0;
a[1] = 1;
a[3] = 3;
Run Code Online (Sandbox Code Playgroud)
然后我结束了
a[2] = 0;
Run Code Online (Sandbox Code Playgroud)
你可以在ideone上看到这个:https://ideone.com/WKn6Rf
我发现Java的原因是在声明数组时定义了四个变量,我们只能为声明的数组大小赋值.但是在JavaScript中,当我声明一个大小为3的数组然后添加第5个元素时,为什么它不考虑第4个元素,null或者0我们是否将数组大小增加到4以上?
为什么我在JavaScript中看到这种奇怪的行为,而在其他语言中却看不到?
请考虑以下代码段:
> a = [1, undefined, undefined, undefined, 3]
[1, undefined, undefined, undefined, 3]
> b = [1,,,,3]
[1, undefined × 3, 3]
> 1 in a
true
> 1 in b
false
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?似乎是,根据我undefined在数组中定义元素的方式,in运算符的行为会有所不同.
在Chrome 21中,[,]输入控制台输出
[undefined x 1]
并提供[undefined]输出
[未定义]
[undefined]和之间有什么区别[undefined x 1]?
符号是什么[undefined x 1]?
考虑以下JavaScript代码(在节点REPL中):
> let a = new Array(10)
undefined
> a
[ <10 empty items> ]
> a.map(e => 1)
[ <10 empty items> ]
> let b = new Array(10).fill(undefined)
undefined
> b
[ undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined ]
> b.map(e => 1)
[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
>
Run Code Online (Sandbox Code Playgroud)
当我创建一个空数组时,我会得到"空项",它们的行为似乎与之不同undefined.有人能解释一下有什么区别吗?
我试图检查我的所有值是否都在我的数组中定义。我的代码如下
\n\nvar check = function (item){return item !== undefined;};\n\n\narray.every(check);\nRun Code Online (Sandbox Code Playgroud)\n\n我在以下数组上尝试过:
\n\nvar array = [];\narray[5] = 0; //[undefined \xc3\x97 5, 0]\narray.every(check); //return true although there are 5 udefined values there\nRun Code Online (Sandbox Code Playgroud)\n\n我究竟做错了什么?
\n这个程序:
var arr = [];
arr[100] = "foo";
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出:
(101) [undefined × 100, "foo"]
Run Code Online (Sandbox Code Playgroud)
但是,这个程序:
var arr = [];
for(var i = 0; i < 101; i++) {
arr[i] = (i === 100 ? "foo" : undefined);
}
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
输出这个("foo"当然最终有):
(101) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, …Run Code Online (Sandbox Code Playgroud) 我有以下代码输出数组的长度,删除它,然后输出新的长度:
console.log($scope.adviceList.activeAdvices.length); // *1*
$scope.adviceList.activeAdvices.splice(id,1); // *id is a parameter*
console.log($scope.adviceList.activeAdvices.length); // *0*
console.log($scope.adviceList.activeAdvices.length); // *1*
delete $scope.adviceList.activeAdvices[id];
console.log($scope.adviceList.activeAdvices.length); // *0*
console.log($scope.adviceList.activeAdvices); // *[]*
Run Code Online (Sandbox Code Playgroud)
删除后,数组正确显示为空.然而,它的长度仍然是1.