如果在控制台输出console.log(a.b),那么它的解析流程是怎样的呢?
对于a来说,a是变量;对于b,b是属性。这样的话,a和b的查找规则就会不同。
-
查找a:查找变量,沿着作用域链查找。
找不到:报错(ReferenceError: a is not defined)
找不到:找到了变量a,准备去.b;但a 的值不同,处理结果也不同:
undefined/null:报错(TypeError: can not read property b of undefined/null) boolean/number/string: 创建了一个包装类对象,准备去.b -
查找b属性:先在对象自身上面找,如果没找到,沿着原型链去找
找不到:返回undefined
找到了:返回它的值
平时在求字符串的长度时:
a是原始值,不是引用值,为什么能够.length呢?
原因就是因为new出了一个和string类型对应的包装类String对象,用这个对象去.length。