数组的存储值被赋值后还是原值?

 arr[i][0] = arr[i][0].toUpperCase();
     console.log(arr[i][0]);
     // 原值是‘a’ , 赋值后返回值是 ‘A’ ,但是打印出来还是‘a’
阅读 2.6k
2 个回答

不应该是你说的这样,会不会是隐藏了其他什么实现细节?譬如你用了immutable.js之类的库?

你给的代码太少了,大概是因为0arr[i]的不可写属性。例如:

var arr = [['a']], i = 0;
Object.defineProperty(arr[i], '0', {
    writable: false
});

arr[i][0] = arr[i][0].toUpperCase();
console.log(arr[i][0]); // 结果a

或者:

var arr = [['a']], i = 0;
Object.freeze(arr[i]);

arr[i][0] = arr[i][0].toUpperCase();
console.log(arr[i][0]); // 结果a

总之是因为,由于某种原因,arr[i]的属性变得不可修改了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题