开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情
内置对象
常见的内置对象有:
- String
- Number
- Boolean
- Object
- Function
- Array
- Date
- RegExp
- Error
这些内置函数都是大写开头,看起来像内置类,实际上只是一些内置函数。也可以当做构造函数,来通过new操作符生成对应的类型数据。
思考如下代码:
var str = 'I am a string'
console.log(typeof str) // string
console.log(str instanceof String) // false
console.log(str.length) // 13
var strObj = new String('I am a string')
console.log(typeof strObj) // object
console.log(strObj instanceof String) // true
如果我们需要获取str的长度length属性,也是可以的。原本字符串的属性和方法都只能String对象,而str仅仅是字符串字面量,按理说是不会有这些属性和方法的,之所以能获取到,是因为在调方法的时候引擎自动把字面量转换成String对象,所以可以访问到。
和String相似的还有Number类型:
123.456.toFixed(2) // '123.46'
在这个过程中,也是纯字面量数字先转化成了Number对象,然后再执行toFixed方法。
Boolean对象没有除了toString和valueOf方法外,没有其他的方法,平时很少见用new Boolean()来生成布尔值。
null和undefined没有对应的构造函数,只有字面量形式。而Date只有构造,没有字面量。
对于Object对象、Function函数、Array数组和RegExp正则表达式来说,不管是文字形式还是构造形式,它们就都是对象,而不是纯粹的字面量。
最后一个Error内置对象,我们常用的场景一般是在抛出异常时使用new Error()这种结构来创建,其他用的不多。
总的来说,不管是通过文字形式还是构造形式,都能创建出对象,在大部分场景下,其实是不需要区分两者的,我们一般就会选择更简单的文件形式来创建,而不必大费周章通过内置对象来生成。当然,在某些情况下,相比文字创建对象,构造形式会提供一些额外的功能,就可以考虑用构造形式来创建,如:RegExp。