JS中关于数组修改的问题

发布于 2022-09-03 14:19:57 字数 345 浏览 16 评论 0

var str = "beijing";
var arr = str.split("");
arr[0]=arr[0].toUpperCase();
arr[str.length-1]=arr[str.length-1].toUpperCase();
arr.reverse();
str=arr.join("");
document.write(str);

为什么arr[0].toUpperCase();需要覆盖原值?数组不是传址的吗?就像arr.reverse(),这就不需要覆盖原来的数组。难道是因为数组中的单个元素是字符型?传址是针对的数组这个整体的?谢谢解答。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

愁杀 2022-09-10 14:19:57

arr[0].toUpperCase()将arr数组中位置0的字符的大写形式返回,之后又赋给arr中位置0,整个过程没有涉及地址什么的

意中人 2022-09-10 14:19:57

你输出一下typeof arr[0]看看

.toUpperCase()是字符串的一个方法,返回一个全大写字符串

归途 2022-09-10 14:19:57

reverse是内部封装方法,实现原理我自己理解是这样的,仅供参考

function Array(){
   function reverse(){
    var ctx = this;
    for (var i = 0;i<ctx.length/2;i++){
       var temp = arr[i];  
       arr[i] = arr[arr.length - i - 1]; 
       arr[arr.length-i-1] = temp;
    }
   }
   return {
     reverse:reverse 
   }
}
裂开嘴轻声笑有多痛 2022-09-10 14:19:57

数组(也是对象的一种,只是键名是数字)和对象是引用没错,可是像 number string boolean null undefined 这5个原始数据类型,是不可改变的。 而 arr[0] , 你输出一下看看 ,这个是字符串。 所以你只有重写这个单元的值喽。

以可爱出名 2022-09-10 14:19:57

楼主需要明白的是在javascript中字符串是一个对象,而且是不可变对象,一个字符串一经定义赋值后就不会改变,我们能改变的仅仅是把变量重新赋值(变量名不变,指向的字符串对象改变了)。
所以对于split分割后成为了多个分离出来的字符串,如arr[0],但执行arr[0].toUpperCase()后的结果是新生成了一个字符串,这个字符串现在是匿名的,而arr[0]的值并没有变化,所以需要重新赋值给arr[0]来保存结果。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文