字符串
('b' + 'a' + +'a' + 'a').toLowerCase() => 'banana'
+'a' 尝试强制转化字符串 'a' 为一个 number, 得到的结果是 NaN. 需要注意的是 typeOf NaN === 'number',但是前后通过字符串相加,又将它强制转化为一个 string 类型。所以最终得到 'baNaNa'.toLowerCase() === 'banana'
new String('a') 和 'a' 是一样的么?
首先 new 出来的一定是一个对象,也就是 typeof 返回的结果是 object, 而直接字符串创建,是一个 string 类型,所以两者是不全等的。
其次,string 是基本类型,也是原始资料类型,储存于栈中,原始的资料类型在运算时用的属性与方法,是向包装对象"借来"的用的, 但是自己本身却没有属性和方法。并向包装对象(new ..())借来方法和属性。
new String(), new Number() 就是包装对象,包装对象也是对象。栈中储存堆指针,堆中储存内容。
Object.create, new Object() 和 {} 是一样的么?
字面量和 new 关键字创建的对象是 Object 的实例,原型指向 Object.prototype,继承内置对象 Object。 只是字面量创建更高效一些。
Object.create(arg, pro)创建的对象的原型取决于 arg,arg 为 null,新对象是空对象,没有原型,不继承任何对象;arg 为指定对象,新对象的原型指向指定对象,继承指定对象