美文网首页你不知道的JavaScript程序员
Javascript知识整理——原生函数

Javascript知识整理——原生函数

作者: 俗三疯 | 来源:发表于2017-09-05 08:06 被阅读26次

    常见的原生函数有

    • String()
    • Number()
    • Boolean()
    • Array()
    • Object()
    • Function()
    • RegExp()
    • Date()
    • Error()
    • Symbol() ————Es6引入

    通过构造函数(如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(..)

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

    • Date(..)主要用来获得当前的Unix时间戳
    • Error(..)创建错误对象主要是为了获得当前运行栈的上下文,上下文信息包括函数调用栈信息和产生错误的代码行号,以便于debug,常与throw一起使用 throw new Error('x wasn't provided');
    Symbol(..)

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

    原生原型

    String.prototype的方法
    • String#indexOf(..)
      在字符串中找到指定字符串的位置
    • String#CharAt(..)
      获得字符串指定位置上的字符
    • String#substr(..)、String#substring(..)和String#slice(..)
      获得字符串的指定部分
    • String#toUpperCase()和String#toLowerCase()
      将字符串转换为大写或小写
    • String#trim()
      去掉字符串前后的空格,返回新的字符串

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

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

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

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

    相关文章

      网友评论

        本文标题:Javascript知识整理——原生函数

        本文链接:https://www.haomeiwen.com/subject/vpayjxtx.html