有人可以解释第一个例子和第二个例子之间的区别吗?
声明" undefined"之间的区别是什么?价值和未申报" undefined"值?
代码
var arr = new Array(4);
arr[0] = "a";
arr[1] = "b";
arr[2] = undefined; //insert undefined here!
arr[3] = "d";
console.log("arr[2] is " + arr[2]); //yes, it is undefined!
arr.forEach(function(value, index) {
console.log(index + ":" + value);
})
console.log("====================")
var arr = new Array(4);
arr[0] = "a";
arr[1] = "b";
//I don't insert undefined to arr[2] in this case.
arr[3] = "d";
console.log("arr[2] is " + arr[2]); //yes, it is undefined!
arr.forEach(function(value, index) {
console.log(index + ":" + value);
})
日志
arr[2] is undefined
0:a
1:b
2:undefined
3:d
====================
arr[2] is undefined
0:a
1:b
3:d
附加示例
var arr = new Array(4);
arr[0] = "a";
arr[1] = "b";
arr[2] = undefined; //insert undefined here!
arr[3] = "d";
console.log("arr[2] is " + arr[2]); //yes, it is undefined!
var i = 0;
var max = arr.length;
for(i; i < max; i++) {
console.log(i + ":" + arr[i]);
}
console.log("====================")
var arr = new Array(4);
arr[0] = "a";
arr[1] = "b";
//I don't insert undefined to arr[2] in this case.
arr[3] = "d";
console.log("arr[2] is " + arr[2]); //yes, it is undefined!
var i = 0;
var max = arr.length;
for(i; i < max; i++) {
console.log(i + ":" + arr[i]);
}
日志
arr[2] is undefined
0:a
1:b
2:undefined
3:d
====================
arr[2] is undefined
0:a
1:b
2:undefined
3:d
答案 0 :(得分:2)
有人可以解释第一个例子和第二个例子之间有什么区别吗?
在第一个例子中:
var arr = new Array(4);
创建一个长度为4的数组,它没有元素。
然后使用直接赋值为索引0到3分配一个值:
arr[0] = "a";
arr[1] = "b";
arr[2] = undefined; //insert undefined here!
arr[3] = "d";
创建属性0到3. undefined 分配给arr[2]
。 forEach 遍历存在的元素,因此您可以看到所有4个元素的结果,每个元素都有一个值。
在第二个示例中,您没有为arr[2]
分配值。当访问对象的不存在的属性(注意Arrays是Objects)时,返回 undefined 值,例如
var obj = {};
console.log(obj.foo) // undefined
使用 forEach 循环遍历属性时,不会访问不存在的属性,因此arr[2]
没有输出。这与 for 循环形成对比,循环通常被编写为访问从0到length - 1
的所有属性,因此返回该范围内所有属性的值,无论它们是否存在。
答案 1 :(得分:0)
JavaScript数组不是常识中的数组。在大多数语言中,数组(a.k.a.向量)是内存中的连续区域。但在JS中,它们是相当稀疏的容器 - 某些元素可能不存在。
事实上,JS中的数组只是对象(键/值映射),区别在于允许使用整数键:
var arr = {}; // object (key/value map), not array, sic!
arr[0] = "a";
arr[1] = "b";
// arr[2] deliberately omitted
arr[3] = "d";
console.log("arr[2] is " + arr[2]); // it is undefined
您甚至可以向JS数组添加非整数键:
var arr = [];
arr[0] = 0;
arr["zero"] = "zero";
这证明数组是引擎盖下的对象。
当您尝试从不存在的键的容器(对象或数组)值获取时,它返回undefined
值。通过ECMAScript规范。
arr[2] = undefined
将该值分配给键2.
delete arr[2]
删除该密钥及其值。