基本类型与Object类型 - pod4g/tool GitHub Wiki

1.在《JavaScript高级程序设计》第三版的第23页,作者有很明确的描述:

ECMAScript中有5种简单数据类型(Undefined,Null,Boolean,Number,String),一种复杂类型(Object)

2.在JavaScript秘密花园的对象部分,也有很明确的描述:

JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined

显然这两种说法是矛盾的,那么var bol = true; var num = 1; var str = 'abc',其中的bol,num,str 到底是对象还是基本类型?

其实它们是基本类型

实验:


var num = 1;
 var numObj = new Number(1);
 console.log(num instanceof Number); // false
 console.log(num.constructor); // Number
 console.log(numObj instanceof Number); // true
 console.log(numObj.constructor); // Number

 var bol = true;
 var bolObj = new Boolean(true);
 console.log(bol instanceof Boolean); // false
 console.log(bol.constructor); // Boolean
 console.log(bolObj instanceof Boolean); // true
 console.log(bolObj.constructor); // Boolean

 var str = "abc";
 var strObj = new String("abc");
 console.log(str instanceof String); // false
 console.log(str.constructor); // String
 console.log(strObj instanceof String); // true
 console.log(strObj.constructor); // String

记住下面一句话:

只有在表达式中用作对象时,才会_自动包装_。典型的就是访问成员的表达式(Member Expression),比如num.constructor,str.length ,基本类型是没有成员的

或者说:

但当成对象来用(调用属性,方法)时,才会调用构造器

GET到的点在https://segmentfault.com/q/1010000004655644?_ea=681241