Pray_0
2015-07-27 10:41
当完成访问以后零食对象会被销毁掉,那问什么alert(a.length)返回了6,没被销毁,然而alert( a.t )却返回undifined,被销毁了呢?
我的理解是,调用length的时候,a会变成String对象,既然是对象那么就有方法和属性,所以就可以使用length方法了,假设a.length显示为6然后销毁,于是我们手贱再来次a.length于是乎再一次a变为了String对象再次调用length属性,显示6后再次销毁;但是a.t=5意味着先将a转换为String对象由于String对象没有t属性,于是a.t在此刻创建了一个临时属性t,它和length相比length早已存在在String中而t却是我们刚刚创建的,于是我们输入完a.t=5;之后t属性立即销毁,如果再次输入a.t显示undefined;这很正常t在前边已被销毁意味着前边我们在String对象创建的临时t属性已被销毁,那么此时我们的t属性编译器怎么能认识?如果我们alert(a.t=5)这时编译器会弹出5这个选框,然后t被销毁,我们再次alert(a.t)会发现是undefined,原因同上t被销毁了,至于length同样也被销毁了,但是length是实打实的存在于String对象中只要转换为String对象,那么String必然有length属性。
每次将基本数据类型当作对象使用的时候, 是临时包装的,用完一次马上就会删除,当a.length的时候,不管如何创建如何删除,它本来的值就是6是不变的。但是a.t确不一样,它是不存在的,你第一次赋值给a.t的时候创建了临时对象,但是调用完马上删除, 这个时候你在去访问a.t的值, 又建立了一个新的临时对象,肯定值是没有定义过的。
length是一直存在,而t是不存在的。
JavaScript深入浅出
281100 学习 · 1020 问题
相似问题