JavaScript 高级程序设计第 4 版(后简称高程4),相较于第 3 版,增加了 ES6 至 ES10 的全新内容,删除了旧版过时的内容,并在原有基础上充实了更加翔实的内容。
中文译版于 2020 年发售,妥妥的“新鲜出炉”,你要是问本瓜:当今学 JavaScript 哪家强,我只能说:红宝书第 4 版最在行。
于是乎,借着更文契机,本瓜将开启一个小系列,带你重看一遍高级程序设计4(先前只是跳着跳着看),将抽取精华,用最简单的话解释核心点、尽量把握全局、快速过一遍的同时,记录与工友们分享~~
正文
第五章 —— 基本引用类型, 这是本瓜最不理解的 JavaScript 语法设定之一!
为什么已经有了::Boolean、Number 和 String 基本类型,还要来一个::Boolean、Number 和 String 原始值包装类型??
let s1 = "some text";s1.color = "red";console.log(s1.color); // undefinedlet s1 = new String("some text");s1.color = "red";console.log(s1.color); // red
神不神奇?
这样做的目的就是:让原始值拥有对象的行为。。。
let falseValue = falseresult = falseValue && trueconsole.log(result) // falselet falseObject = new Boolean(false);console.log(falseObject) // Boolean {false}console.log(falseObject&&true) // true
所以,一切通过 new 关键字创建的,都是对象!!
对象被认为是某个特定引用类型的实例。新对象通过使用 new 操作符后跟一个构造函数(constructor)来创建。构造函数就是用来创建新对象的函数;
上面的 String()、Boolean() 都是构造函数,都是用来构造引用类型的对象的!!
以下代码可以充分说明以上观点:
let s1 = new String("some text")console.log(s1.__proto__===String.prototype) //true
let s1 = new String("some text")let s2 = s1s1.color='red'console.log(s2) // String {'some text', color: 'red'}let s1 = "txt"let s2 = s1s1='red'console.log(s2) // txt
书归正传,Date()、RegExp() 自带的引用类型构造函数就不多说了,有机会专题写写;
5.4 讲到:单例内置对象:Global、Math
具体使用,就不展开了;
需要强调的是:当代码开始执行时,全局上下文中会存在两个内置对象:Global 和 Math。其中,Global 对象在大多数 ECMAScript 实现中无法直接访问。不过,浏览器将其实现为 window 对象。所有全局变量函数都是 Global 对象的属性。Math 对象包含辅助完成复杂计算的属性和方法。
小结
此一章,最有意思的,还是对于:原始值包装类型 的理解;
JavaScript 可以实现面向对象编程,但是它实际上是没有“类”的,我们通过构造函数来实力对象,其实是变相在实现“类”的继承能力;至于具体的实现,包括原型链这些,后面再聊。
OK,以上便是本篇分享。 觉得不错点个赞吧???,您的鼓励,我的动力,坚持原创质量好文~~ 欢迎评论留言 我是掘金安东尼,输出暴露输入,技术洞见生活。再会吧~~ ???
原文:https://juejin.cn/post/7103327611379515406