《JavaScript权威指南》第7版中文版 勘误记录(边读边写,随时更新,只记录中文版引入的新bug)

版次:2021年3月第1版 2021年9月第3次印刷

重要问题

位置 7.2节 第5段 147页

因为这个名字非负整数,所以会被当成常规的对象属性
应为
因为这个名字不是非负整数,所以会被当成常规的对象属性
中文版
英文版

位置 7.8.1节 reduce()与reduceRight 第3段 155页

接着计算3+4=6
应为
接着计算3+3=6
中文版
英文版

位置 8.6节 第9、10段 190页

  • 示例代码d.count()缺少注释
  • 破句
    还有作用中域中的一个新私有变量
    应为
    还有作用域中的一个新私有变量
    中文版
    英文版

位置 11.1.2节 第4段 247页

从映射中删除指定的键(及其关联值)的remove()
应为
从映射中删除指定的键(及其关联值)的delete()
中文版
英文版

位置 11.2.2节 第8段 252页

代码注释中的“256位整数”在上下文中是混淆的
可以改为
256个整数
中文版
英文版

位置 11.3.1节 258页 第2段 Unicode字符类

正则表达式元字符 p 需要使用 \ 转义,且原文并未使用正则表达式字面量
中文版
英文版

位置 11.3.1节 任选、分组和引用 第12段 表11-4 262页

字符 \| 应为 |
中文版
英文版

位置 11.3.1节 指定匹配位置 第2段 263页

因为它在“avaScript”中
应为
因为它在“JavaScript”中
中文版
英文版

位置 11.4.3节 第2段 toISOString() 263页

年-月-日时:分:秒:毫秒
日期时间缺少空格,分隔符为英文半角,毫秒使用点号分割,应为
年-月-日 时:分:秒.毫秒
中文版
英文版

位置 11.7.2节 第2段 283页

同时增加一周就做不到
应为
同时增加一个星期字段就做不到
中文版
英文版

位置 11.8.1节 第2段 290页

格式化字符串%0
应为大写字母O而不是数字0
%O
中文版
英文版

位置 12.3节 第3段 300页

只要在function关键字前面加……
应为
只要在function关键字后面加……
中文版
英文版

位置 14.2节 第5段 列表项1 345页

对象的所有自有属性不可扩展
应为
对象的所有自有属性不可配置
中文版
英文版

次要问题

位置 8.4.1节 第1段 186页

// Return and increment counter property
注释漏翻译,可以翻译为
// 返回并递增counter属性
中文版

位置 9.2节 第3段 205页

它调用会自动创建……
破句,应为
调用它会自动创建……
中文版

位置 9.3节 第3段 210页

解释器隐式为你……
破句,应为
解释器隐式为你……
中文版

位置 11.3.1节 字符类 第1段 257页

caret通常翻译为脱字符
中文版
英文版

位置 11.3.1节 命名捕获分组 第1段 262页

这个新特殊
应为
这个新特性
中文版
英文版

位置 11.3.2节 replace() 第1段 266页

replace()方法会用替换字符串中的所有匹配项
破句,可以调整为
replace()方法会用替换字符串替换原始字符串中的所有匹配项
中文版
英文版

位置 11.3.2节 replace() 第3段 266页

示例代码返回值只需用一个箭头表示
中文版
英文版

位置 14.2节 第2段 345页

遗漏其他章节参考
中文版
英文版

位置 14.6节 第2段 Reflect.ownKeys(o) 358页

Object.getOwnPropertyNames()不需要连字符
中文版
英文版

位置 14.6节 第2段 末尾表格 359页

换行排版有误
中文版

位置 14.7.1节 第1段 365页

……来消除一致
应为
……来消除不一致
中文版
英文版

位置 15.1.2节 第4段 373页

而文档中的每一行文本也都有一个与之对应的Text对象
“行”这个量词使用有误,通常连续的多行文本属于同一个Text对象,可以改为
而文档中的每一块文本也都有一个与之对应的Text对象
中文版
英文版

位置 15.3.1节 预选择的元素 第1段 395页

但只有<a>标签有href属性
应为
但只包括有href属性的<a>标签
中文版
英文版

位置 15.3.1节 预选择的元素 第2段 395页

document.call
应为
document.all
中文版
英文版

位置 15.4.3节 第4段 409页

如果某元素没有被绝对定义
应为
如果某元素没有被绝对定位
中文版
英文版

位置 15.4.5节 第8段 411页

这时候可能刚刚指定transition-delay样式
表达不清晰,可以改为
这时候可能由于transition-delay样式的存在,而导致在视觉上没有任何变化
中文版
英文版

位置 15.7.1节 第1段 示例代码 429页

  • 遗漏注释翻译
  • 多余的注释符号
    中文版

参考资料

http://www.oreilly.com.cn/index.php?func=errata&isbn=978-7-111-67722-2
https://www.oreilly.com/catalog/errata.csp?isbn=0636920048633

JS获取Chrome完整版本号

从Chrome 103开始navigator.userAgent只能获取到主版本号了。以下代码通过User-Agent Client Hints API获取完整版本号:

const uaValues = await navigator.userAgentData.getHighEntropyValues(['fullVersionList'])
const fullVersion = uaValues.fullVersionList.findLast(entry=>entry.brand='Google Chrome').version
console.log(fullVersion)

参考

https://developer.mozilla.org/en-US/docs/Web/HTTP/Client_hints

npm使用国内镜像安装Electron

shell:

ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm install --registry=https://registry.npmmirror.com -g electron

如仍然无法运行,cdnode_modules/electron/,执行

ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ node install.js

Windows cmd:

set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
npm install --registry=https://registry.npmmirror.com -g electron

如仍然无法运行,cdnode_modules/electron/,执行

set ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
node install.js

Oracle JDK历史版本下载

https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk12-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk13-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk14-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk16-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk18-archive-downloads.html
https://www.oracle.com/java/technologies/javase/jdk19-archive-downloads.html

Visual Studio离线安装版制作问题汇总

制作方法

离线包的制作方法主要是用vs_setup --layout LAYOUT_DIR,具体参考微软官方文档,这里不再赘述:
https://docs.microsoft.com/zh-cn/visualstudio/install/create-an-offline-installation-of-visual-studio

VS版本

VS 2015有部分包已经无法从官方下载,返回HTTP 404错误,因此目前已无法制作VS 2015版的离线包。目前经测试VS 2017和VS 2019没有问题。

打包成镜像

如果要把离线包做成iso镜像,由于平级目录太多,导致一些GUI制作工具直接卡死。笔者目前能够在网上找到的方案都是说使用一款叫“Free ISO Creator”的工具。

虽然该工具能顺利制作出iso镜像,但经实测在电脑断开互联网连接,完全离线的情况下还是会出现包下载失败的提示:“在 9 次尝试后,下载以下文件时出现问题”。
下载文件出现问题

根据报错的下载url,在离线包根目录下的Catalog.json中查找线索,找到对应的下载目录,再去验证该目录的存在性。结果发现,由于目录名称太长,已被截断,这就导致安装程序找不到目录而使用网络下载。

找到原因就好办了,笔者的解决办法是将镜像创建为UDF格式,支持长文件名,只是打开光盘列出目录时有点卡。笔者利用机器上安装的WSL(Debian Linux)中的genisoimage命令来生成镜像:

genisoimage -v -V VS2019_COMM -udf -o vs2019-comm.iso /mnt/d/VS2017/comm/

格式:
genisoimage 选项 源文件目录

选项:
-v 显示打包进度
-V 卷标
-udf UDF格式
-o 输出文件名

更新及删除过时的包

当VS有版本更新时,可以再次使用--layout进行新包的下载。根据vs_setup --help给出的提示,可以使用--clean 旧Catalog.json来清除过时的包。更新后应执行清理,否则layout目录会迅速膨胀。不过笔者几经尝试都以失败告终,最后使用如下工具来进行清理:
https://github.com/deepak-rathi/VS2017OfflineSetupUtility