首先看下面的例子:
var s = "test"; -->1
s.len = 4; -->2
var t = s.len; -->3
我的第一反应就是t应该输出是4,结果输出其实是undefined。看了书之后,里面的原因其实是(自我理解)每当编译的时候当编译器遇到s的时候他会临时new一个类并把s作为其构造函数的输入参数:
s = new String(s); -->4
但是正如上面所说是临时建立的,所以当上面代码的2完成后这个类便被discard(抛弃)了。所以第3行的代码t拿到的是又一次临时新建的String类,自然没有定义它的len属性,所以t的值就是undefined啦。
为什么叫他糖衣类,因为我很自然看这个代码就以为4,以为正确了就好像吃了糖一样开心。结果那只是一层糖衣而已,里面原来是这样苦涩。但愿考试的时候别走马观花就认为t的输出就是4了~~。
ps:这里还要备忘的是,没想到String还有这事,豁然开朗(下面是我复制粘贴的):
var s = "hello world!"; -->5 var word = s.substring(s.indexOf(" ")+1, s.length); -->6
Strings are not objects, though, so why do they have properties? Whenever you try torefer to a property of a string s, JavaScript converts the string value to an object as if by calling new String(s).This object inherits string methods and is used to resolve the property reference.