var a = ‘hello’;会正常执行 执行到 a.color = ‘red’时会进行包装类的调用即 var a = new String(‘hello’);然后给String下面新增一个属性color = red ,然后内部重新设置a的值为’hello’(a = ‘hello’)。但是在console.log(a.color);时,js引擎判断又有调用属性的写法,会再次new String(‘hello’)了,自然在这个新的String类型下是没有color属性的,所以会返回undefined了。