这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
前言
大家好哇,今天来记录一下javascript的原生函数,内容主要参考《你不知道的JavaScript》(中卷),同时会加上自己的思考,以及实践的例子,有道是好记性不如烂笔头,读了书一定要勤做笔记,这样不仅记的牢固,也能提升自己的水平。
提前说明哦,这是一篇前端笔记类的文章,属于个人记录。各位高人请绕道勿喷,谢谢~
正文
原生函数可以被当成构造函数来使用,但是构造出来的对象和我们设想的有所不同。
内部属性
所有typeof返回值为“object”的对象,都包含一个内部属性[[Class]],这个属性无法直接访问,一般通过Object.prototype.toString(...)来查看。
封装对象包装
基本类型值是没有length、toString()这种属性和方法的,JavaScript会自动为基本类型值包装一个封装对象。所以一般不推荐直接使用封装对象,使用封装对象达到“提前优化”代码反而会降低执行效率。
拆封
想要得到封装对象中的基本类型值,可以使用valueOf()函数。
原生函数作为构造函数
关于数组、对象、函数和正则表达式、使用字面量或者使用构造函数来创建它们其实是一样的,创建的值都使用过封装对象来包装的。
应尽量避免使用构造函数,因为会产生意想不到的结果。
比如Array构造函数只带一个参数的时候,这个参数会被当成数组的预设长度而不是数组中的一个元素。
不建议创建和使用空单元数组
尽量不适用new Object()、new Function()、new RegExp(),它们只在很少情况下有用处,如动态定义函数参数和函数体,动态定义正则表达式的时候。
Date(...)和Error(...)
- 创建日期对象必须使用new Date()。
- ES5新增了Data.now()可以直接获取当前时间戳。
- 调用Date()的时候如果不带new关键字,则会得到当前日期的字符串值,具体格式规范没有规定。
- 构造函数Error(...)与Arror类似,带不带new关键字均可。用于创建错误对象。
- 错误对象常与throw一起使用,如:throw new Error("这是一个错误对象")
- 还有一些针对特定错误类型的原生构造函数,如EvalError()、RangeError()、ReferenceError()、SyntaxError()、TypeError()、URLError()等。
Symbol
ES6新增的基本数据类型——符号,具有唯一性的特殊值,符号并非对象,而是一种简单标量的基本类型。具体可参考我的另一篇文章《看完就懂系列》答应我,看完就开始用Symbol好吗?
原生原型
原生构造函数都有自己的.prototype对象,其中包含对应子类型所持有的行为特征。
所有的函数都可以调用Function.prototype中的apply(...)、call(...)、和bind(...)
原型可以作为默认值
Function.prototype是一个空函数,RegExp.prototype是一个“空”的正则表达式,Array.prototype是一个空数组。对未赋值的变量来说,它们是很好的默认值,因为它已被创建并且仅创建一次。
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛