你不知道的JavaScript程序员

Javascript知识整理——原生函数

2017-09-05  本文已影响26人  俗三疯

常见的原生函数有

通过构造函数(如new String('abc')创建出来的是封装了基本类型值(‘abc’)的封装对象

内部属性[[Class]]

所有typeof返回值为'object'的对象都包含一个内部属性[[Class]],通过Object.prototype.toString()来查看

Object.prototype.toString().call([1,2,3]) //[object Array]
Object.prototype.toString().call(/regex-literal/i); // [object RegExp]
大多数情况下,对象的内部[[Class]]属性和创建该对象的内建原生构造函数相对应。

基本类型值如null和undefined的[[Class]]

Object.prototype.toString.call(null) //"[object Null]"
Object.prototype.toString.call(undefined) //"[object undefined]"

其他基本类型值(字符串、数字和布尔)的[[Class]]指向其包装对象的[[Class]]

Object.prototype.toString.call('abc')//[object String]
Object.prototype.toString.call('42') //[object Number]
Object.prototype.toString.call(true) //[object Boolean]

封装对象的注意点

创建的封装对象为真值
var a = new Boolean(false)
if(!a){console.log('Oops');//执行不到这里

拆封

若要得到封装对象中的基本类型值,可以使用valueOf()函数
var a = new String('abc')
a.valueOf() //"abc"

原生函数作为构造函数

Array构造函数只带一个数字参数的时候,该参数会被作为数组的预设长度
只要将length属性设置为超过实际单元数的值,就能隐式地制造出空单元(稀疏数组)
除非万不得已,否则不要使用Object(..)/Function(..)/RegExp(..)

构造函数Function只有在极少数情况下很有用,比如动态定义函数参数和函数体的时候
两列建议使用常量形式(如/^a*b+/g)来定义正则表达式,不仅语法简单,执行效率也更高

Date(..) 和 Error(..)

这两个原生构造函数作用比其他的大很多,因为没有对应的常量形式可以代替

Symbol(..)

Symbol()比较特殊,如果带new运算符的话会报错

原生原型

String.prototype的方法

以上方法均不改变原字符串的值,而是返回一个新字符串

某些原生原型并非普通对象那么简单

Function.prototype是一个函数,RegExp.prototype是一个正则表达式,而Array.prototype是一个数组,三者都是空的,是很好的默认值

本文参考《你不知道的JS中卷》

上一篇下一篇

猜你喜欢

热点阅读