JS 设计的只支持一维数组,出于何种考虑,还支持二维数组的写法?

JS 设计的只支持一维数组,出于何种考虑,还支持二维数组的写法?

这个特性差点把我虐成狗

最初以为是 Chrome 的bug,但是测试是 IE、FireFox都支持,结果都一直,难道是标准的一部分

var testArr = [];
testArr[0,0] = 0;
console.log(testArr, "    len:", testArr.length, "    0,0:", testArr[0,0]);
//IE9:日志: 0    len:1    0,0:0 
//Chrome:[0] "    len:" 1 "    0,0:" 0
//Firefox:Array [ 0 ]     len: 1     0,0: 0

testArr[0,1] = 1;
console.log(testArr, "    len:", testArr.length, "    0,1:", testArr[0,1]);
//IE9:日志: 0,1    len:2    0,1:1 
//Chrome:[0, 1] "    len:" 2 "    0,1:" 1
//Firefox:Array [ 0, 1 ]     len: 2     0,1: 1

testArr[0,2] = 2;
console.log(testArr, "    len:", testArr.length, "    0,2:", testArr[0,2]);
//IE9:日志: 0,1,2    len:3    0,2:2 
//Chrome:[0, 1, 2] "    len:" 3 "    0,2:" 2
//Firefox:Array [ 0, 1, 2 ]     len: 3     0,2: 2

testArr[1,1] = 11;
console.log(testArr, "    len:", testArr.length, "    0,1:", testArr[0,1] , "    1,1:", testArr[1,1]);
//IE9:日志: 0,11,2    len:3    0,1:11    1,1:11 
//Chrome:[0, 11, 2] "    len:" 3 "    0,1:" 11 "    1,1:" 11
//Firefox:Array [ 0, 11, 2 ]     len: 3     0,1: 11     1,1: 11

//结论:
testArr[100,1] == testArr[1]
//下面代码是搞笑的
var arr = [1,2], val;
//val = arr[1]写成不知道算不算黑科技
val = arr[1,0,0,8,6,"是","中","国","移","动","的","客","服","电","话",1] 
阅读 2.5k
2 个回答

你知道逗号运算符吗?

var a = 1, 2;
// a === 1

var a = (1, 2);
// a === 2

var a = (1, 2, 3, 4, 5, 6);
// a === 6;

所以 arr[1,2] 相当于 var i = (1, 2); arr[i],也就是 arr[2]

想明白了,自问自答下:

var arr = [1,2];

方括号([])内的内容被当作 表达式求值了

arr["我",alert('我执行了!'),1] == 2

代码分解

var _temp;
_temp= "我",alert('我执行了!'),1;
//_temp = 1
arr[_temp] == 2
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏