最近在看javascript权威指南(第六版),在7.3节中,有下面这段代码var arr2 = [,,,];
var arr3 = new Array(3);
console.log(0 in arr2); //false ====>书中写的true:0在arr1处有一个元素
console.log(0 in arr3); //false
我在火狐、ie9、chrome中测试了都是false,后来又打印了里面的元素
console.log(arr2); // [undefined,undefined,undefined]
console.log(arr3); // [undefined,undefined,undefined]
上面显示的数组里都是undefined,而当我循环时,却啥都木有for(var i in arr2) {
console.log(i+'='+arr2[i]) //没有显示
}
for(var i in arr3) {
console.log(i+'='+arr3[i]) //没有显示
}当我改动一处时,var arr2 = [undefined,,,];
var arr3 = new Array(3);
console.log(0 in arr2); //true
console.log(0 in arr3); //false
我想问下,这里的undefined之间的区别
var arr3 = new Array(3);
console.log(0 in arr2); //false ====>书中写的true:0在arr1处有一个元素
console.log(0 in arr3); //false
我在火狐、ie9、chrome中测试了都是false,后来又打印了里面的元素
console.log(arr2); // [undefined,undefined,undefined]
console.log(arr3); // [undefined,undefined,undefined]
上面显示的数组里都是undefined,而当我循环时,却啥都木有for(var i in arr2) {
console.log(i+'='+arr2[i]) //没有显示
}
for(var i in arr3) {
console.log(i+'='+arr3[i]) //没有显示
}当我改动一处时,var arr2 = [undefined,,,];
var arr3 = new Array(3);
console.log(0 in arr2); //true
console.log(0 in arr3); //false
我想问下,这里的undefined之间的区别
解决方案 »
- jsp 中在父页面打开的showModalDialog 点击关闭后自己又打开一次怎么回事啊
- 急,急,急,xtree如何用啊,我是要实现一个节点ID确定的高效动态树
- easyui-numberbox 属性控制
- 请教javascript中取得对象绝对位置(left, top)的问题.
- js文件太多,想替换变量名,请教如何替换?
- ajax获取GB2312网页
- 能用Javascript实现网页的某一部分的数据更新吗?
- 问一个问题,Function.arguments 对象不是数组?为何下面的方法会报错?
- 如何对模态窗口定位啊??
- 如何能在个人页面用JS实现交互式的添加地址?
- Jquery 如何获取GridView里面的textbox值
- 只要用jquery validate提交验证一次后,错误提示一直存在.
第一个返回false,是因为数组中没有元素
第二个返回true,是因为数组中指定数组下标有值,所以返回true。相当于判断arr2[0]有没有值了var arr2 = [undefined,,,];
console.log(1 in arr2); //照样是false
var a2 = new Array(3); // This array has no values at all
0 in a1 // => true: a1 has an element with index 0
0 in a2 // => false: a2 has no element with index 0这个地方作者描述返回true。我在浏览器中测试的结果和你相同。但是在中文版本中(淘宝团队翻译)加入了下面的话:
“需要注意的是,当省略数组直接量中的值时(使用连续的逗号,比如[1,,3]),这时所得到的数组也是稀疏数组,省略掉的值是不存在的:”
然后给出例子:var a1 = [,]; // 此数组没有元素,长度是1
var a2 = [undefined]; //……
0 in a1 // => false: a1 在索引0处没有元素
0 in a2 // => true: a2 在索引0处有一个值为undefined的元素然后还添加了下面这段话:
“在一些旧版本的实现中(比如Firefox 3),在存在连续逗号的情况下,插入undefined值的操作则与此不同,在这些实现中,[1,,3]和[1,undefined,3]是一模一样的。”其实,淘宝团队在翻译时貌似发现原作者给的示例执行可能会是false,所以添加了这段代码以铺垫说明“在旧版版中实现……[1,,3]和[1,undefined,3]是一模一样的”这个特例。
由此,原作者的测试环境是所谓的“旧版本”我认为两处undefined没有什么区别,都是javascript中的特殊值undefined