持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
JavaScript 高级程序设计第 4 版(后简称高程4),相较于第 3 版,增加了 ES6 至 ES10 的全新内容,删除了旧版过时的内容,并在原有基础上充实了更加翔实的内容。
中文译版于 2020 年发售,妥妥的“新鲜出炉”,你要是问本瓜:当今学 JavaScript 哪家强,我只能说:红宝书第 4 版最在行。
于是乎,借着更文契机,本瓜将开启一个小系列,带你重看一遍高级程序设计4(先前只是跳着跳着看),将抽取精华,用最简单的话解释核心点、尽量把握全局、快速过一遍的同时,记录与工友们分享~~
正文
第六章:集合引用类型, 主要讲的就是 Object 和 Array
问:
代码语言:javascript复制let obj = {}
// 和
let obj = new Object()
这两个是一样的吗?
咱就说,别光看着了,在控制台上打印打印,不就知道了?
两者是相同的!
作者提到:
但实际上开发者更倾向于使用对象字面量表示法。这是因为对象字面量代码更少,看起来也更有封装所有相关数据的感觉。
有谁会这样创建数组吗?
代码语言:javascript复制let names = Array("Greg")
本瓜想应该很少人会这样~
题外问:你认为以下两句声明,效果一样吗?
代码语言:javascript复制let str = new String()
let str = ""
除了 Object,Array 应该就是 ECMAScript 中最常用的类型了。
书归正文,讲到了系列操作数组的方法。
数组索引、数组检测 .isArray()、数组迭代器、数组转换 toString()和 valueOf()、数组操作、排序等等……
特别提下:数组的归并
ECMAScript 为数组提供了两个归并方法:reduce()和 reduceRight(),这两个方法都会迭代数组的所有项,并在此基础上构建一个最终返回值。
reduce() 和 reduceRight() 接收 4 个参数:上一个归并值、当前项、当前项的索引和数 组本身。这个函数返回的任何值都会作为下一次调用同一个函数的第一个参数。
我们熟悉的,用 reduce 作加法:
代码语言:javascript复制let values = [1, 2, 3, 4, 5];
let sum = values.reduce((prev, cur, index, array) => prev cur);
alert(sum); // 15
代码语言:javascript复制let values = [1, 2, 3, 4, 5];
let sum = values.reduceRight(function(prev, cur, index, array){
return prev cur;
});
alert(sum); // 15
另一个容易忽略的重点:定型数组
定型数组(typed array)是 ECMAScript 新增的结构,目的是提升向原生库传输数据的效率。
为什么要创造定型数组??
一句话可以理解为:为了让 JavaScript 具有更好的 2D、3D 绘制能力~
设计定型数组的目的就是提高与 WebGL 等原生库交换二进制数据的效率。由于定型数组的二进制表示对操作系统而言是一种容易使用的格式,JavaScript 引擎可以重度优化算术运算、按位运算和其他对定型数组的常见操作,因此使用它们速度极快。
ArrayBuffer 是所有定型数组及视图引用的基本单位。
代码语言:javascript复制const buf = new ArrayBuffer(16); // 在内存中分配 16 字节
alert(buf.byteLength); // 16
const buf = new ArrayBuffer(12); // 创建一个 12 字节的缓冲
允许读写 ArrayBuffer 的视图是 DataView
代码语言:javascript复制const ints = new Int32Array(buf);// 创建一个引用该缓冲的 Int32Array
这个定型数组知道自己的每个元素需要 4 字节(4*8),在控制台打印试试(挖坑:后面有机会专题补以下 ArrayBuffer)
然后,讲到了 Map (新的集合类型,为 JS 这门语言带来了真正的键/值存储机制;)和 Set (新集合类型,为 JS 这门语言带来集合数据结构);