你不知道的JS系列 ( 28 ) - 内置对象
JavaScript 还有一些对象子类型,通常被称为内置对象
String
Number
Boolean
这三个内置对象的名字看起来和简单基础类型一样,实际上它们的关系更复杂
Object
Function
Array
Data
RegExp
Error
这些内置函数可以当作构造函数来使用,从而构造一个对应子类型的新对象
var strPrimitive = 'I am a string'; typeof strPrimitive; // string strPrimitive instanceof String; // false var strObject = new String('I am a string'); typeof strObject; // Object strObject instanceof String; // true // 检查 sub-type 对象 Object.prototype.toString.call(strObject); // [object String]
从代码中可以看到,strObject 是由 String 构造函数创建的一个对象。
原始值 'I am a string' 并不是一个对象,它只是一个字面量,并且是一个不可变的值,如果要在这个字面量上执行一些操作,比如获取长度,访问其中某个字符等,需要将其转换成 String 对象。
var strPrimitive = 'I am a string'; console.log(strPrimitive.length); // 13 console.log(strPrimitive.charAt(3)); // 'm'
可以直接在字面量上访问属性和方法,是因为引擎自动把字面量转换成 String 对象。数字字面量,布尔字面量也是如此