值与类型 — 机器世界里只有比特
这一章讲三件事: JavaScript 世界里的「东西」到底是什么(值、类型); 四种基本类型各自的边界(尤其是数字能精确到哪一位、字符串(成串的文字)的 16 位格(一个存放格)); 以及这门语言最臭名昭著的行为——你写错了类型,它不报错,而是悄悄替你转。 读完你能预判哪些计算会精确、哪些会失真,以及怎么防。
1. 全景:比特海、值、类型
先交代世界观:在计算机的世界里只有数据(data)——你只能读它、改它、造新的,「不是数据的东西」压根无法提及;而所有数据都以长长的比特序列(0/1 排成的队)存放,本质上彼此相像1。
比特(bit) 就是任何只有两态的东西:高低电荷、强弱信号、光盘上一个亮斑或暗斑。任何离散信息都能折成 0 和 1 的序列2。
书里拿数字 13 做演示。二进制和十进制一个道理,只是每个位置的权重(这一位值多少)从「乘 10」变成「乘 2」:
0 0 0 0 1 1 0 1
128 64 32 16 8 4 2 1 ← 每一位的权重
图说:非零的三位是 8、4、1,加起来 = 13。
这串就是二进制的 00001101。