原生函数

185 阅读1分钟

常用的原生函数

String(),Number(),Boolean(),Array(),Object(),Function(),RegExp(),Date(),Error(),Symbol(),实际上就是内建函数,原生函数常被当做构造函数来使用,但构造出来的对象会有点不一样,举例!

var a = new String("abc");
typeof a // "object"
a instanceof String; // true
Object.prototype.toString.call(a) // "[object String]"

通过构造函数创建出来的是封装了基本类型值封装对象,这里的typeof返回的是对象类型的子类型

内部属性[[Class]]

所有typeof返回值为“object”的对象都包含了一个内部属性[[Class]],这个属性无法直接访问,一般通过Object.prototype.toString()来查看,举例!

Object.prototype.toString.call([1,2,3]) // '[object Array]'
Object.prototype.toString.call("aaa")  // '[object String]'
Object.prototype.toString.call(null)  // '[object Null]'
Object.prototype.toString.call(undefined)  // '[object Undefined]'

多数情况下,对象内部的[[Class]]属性和创建该对象的原生构造函数相对应,但也并不总是如此,如null()和undefined()这样的构造函数就并不存在,但内部属性[[Class]]仍是“Null”和“Undefined”

封装对象包装

由于基本类型值没有.length或者.toString这样的属性方法,,需要通过封装对象才能访问,此时javascript会自动为基本类型值包装应该封装对象