144 - 《Just JavaScript 笔记和翻译包》
Just JavaScript 是 Dan 出品的 JavaScript 入门课程,刚出时就买了。今天翻「Might DO」清单捞回来的,看了好久,总算是看完了。作为 10 年+ JavaScript 经验的前端,也学到了不少,上午在群里提的问题,都是出自本书。同时,看的时候顺手翻译了下,中英文版见附件。
Just JavaScript 会帮你打造正确的心智模型。心智模型之所以重要,是因为他能确保你对代码的估算是正确的。在头脑中模拟一台计算机很难,心智模型是你唯一能依赖的。
比如:
function duplicateSpreadsheet(original) {
if (original.hasPendingChanges) {
throw new Error('You need to save the file before you can duplicate it.');
}
let copy = {
created: Date.now(),
author: original.author,
cells: original.cells,
metadata: original.metadata,
};
copy.metadata.title = 'Copy of ' + original.metadata.title;
return copy;
}
比如:
if (typeof(value) === 'date') {
console.log('This is a date, indeed!');
}
这些都是有点问题的代码,你能一眼看出吗?
Just JavaScript 讲解的内容不多,只有值、变量、equality 运算、属性、突变和原型。但却是我见过讲 JavaScript 讲地最有趣的一本书,比如 JavaScript 宇宙的设定、变量是线的比喻、表达式即提问的比喻、undefined 黑洞的比喻、福尔摩斯和约翰的故事、值的假面舞会、值的召唤和创建等,都令人印象深刻。趁我还没忘光,赶紧做些笔记。
1、值。共 9 种值,无意缺失的 Undefined、有意缺失的 Null、Booleans、Numbers、大数运算的 BigInts、Strings、Symbols、对象和函数;这些值又可分为两类,前 7 种是原始值,后 2 种是引用值;通过 typeof 可窥探值类型,但要注意有一个会说谎;Null 和 Undefined 是孤独的值,他们只有一个唯一值。
2、表达式。比如 1+2
,比如 typeof X
,比如 a.b
等都是表达式。这里有个很好的比喻,表达式是你向 JavaScript 提的问题,然后他会告诉你一个「值」。比如你问 1+2
是什么,他会回复你 3。
3、原始值和引用值。原始值不可变,比如 let foo = 'bar'; foo[0]='h'; console.log(foo);
得到的还是 'bar'
,如果你开启了严格模式,还会直接报错;引用值是可变的,比如 let foo = ['b']; foo[0] = 'c'; console.log(foo)
会得到 ['c']
。作者把原始值比喻成遥远的星星;把引用值比喻成围绕在周围可操控的小行星。
4、变量。变量不是值,变量指向值。变量是线。比如 let pet = "dog"
,等号的左边是变量,等号的右边是值或表达式,如果是表达式,会求值;变量赋值就是把变量和值通过线连起来;文章里用动图很形象地表示了线连的过程,推荐自己翻看。
5、Undefined。别被名字骗了,以为他是「未定义」,然后写 console.log(foo); let foo
这种代码;Undefined 就是普通的原