基本类型与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