String对象赋值问题
/**今天在一个blog上面看到一个赋值运算符,拿过来分析下*/var x = y = new String("abc");x.x = x = "def";console.log(x,y,x.x,y.x);/*说下结果结果是devabcundefineddef但是看了对应文章的分析,我感觉分析的有点问题,所以拿过来分析下对方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 = nullx = "def";x对象被转化为了string类型了,基本数据类型,所以y不会改变数据类型,这是string的特性,string的引用是一种不可被改变值的对象,比较特殊,new String("abc")其实就是一个类似数组的对象,里面也是按索引0开始的一个类似数组,已经存在的索引是无法修改的,也无法删除。x.x = x; 因为x已经变成了基本数据类型,所以x.x是是不能操作的,但是x.x实际上又是y.x的一个引用,所以y.x会变成def*/?