String对象赋值问题

/**
今天在一个blog上面看到一个赋值运算符,拿过来分析下
*/

var x = y  = new String("abc");

x.x = x = "def";

console.log(x,y,x.x,y.x);

/*
说下结果
结果是
dev
abc
undefined
def

但是看了对应文章的分析,我感觉分析的有点问题,所以拿过来分析下
对方blog的地址是http://lichaosoft.net/?p=89

要了解的点
1:赋值运算符是从右侧到左侧,所以以下的是相等的
x = y = "abc"   实际上就是 x = (y = "abc")

2:new String("abc")的类型,是对象,所以赋值的时候应该是传引用,不是传值
所以上面例子中的var x = y = new String("abc");
我们的结论应该是x和y应该是同变化的,修改x的时候y会同时变化。

3:比较关键的一个地方

x.x = x = "def";
这个东西最应该注意的地方是首先干吗?
他会首先是定义一个值x.x变量,分解的话可以理解为这样

var x.x = null; x对象改变了,加了一个变量值,那么y相对应的改变y.x = null
x = "def";x对象被转化为了string类型了,基本数据类型,所以y不会改变数据类型,这是string的特性,string的引用是一种不可被改变值的对象,比较特殊,new String("abc")其实就是一个类似数组的对象,里面也是按索引0开始的一个类似数组,已经存在的索引是无法修改的,也无法删除。

x.x = x; 因为x已经变成了基本数据类型,所以x.x是是不能操作的,但是x.x实际上又是y.x的一个引用,所以y.x会变成def

*/
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值