a.b表达式的解析流程

256 阅读1分钟

如果在控制台输出console.log(a.b),那么它的解析流程是怎样的呢?

image.png

对于a来说,a是变量;对于b,b是属性。这样的话,a和b的查找规则就会不同。

  1. 查找a:查找变量,沿着作用域链查找。

    找不到:报错(ReferenceError: a is not defined)

    找不到:找到了变量a,准备去.b;但a 的值不同,处理结果也不同:

       undefined/null:报错(TypeError: can not read property b of undefined/nullboolean/number/string: 创建了一个包装类对象,准备去.b
       
    
  2. 查找b属性:先在对象自身上面找,如果没找到,沿着原型链去找

    找不到:返回undefined

    找到了:返回它的值

平时在求字符串的长度时:

image.png

a是原始值,不是引用值,为什么能够.length呢?

原因就是因为new出了一个和string类型对应的包装类String对象,用这个对象去.length。