字面量
① 数字、② 字符串、③ 布尔值、④ null
、⑤ undefined
。
数字
- JS 中的数字为
number
类型。 - 科学记数法:
2.5e3
/2.5E3
→2.5 * 10**3
→ 2500。
整数
- 数字有 10 进制、2 进制、8 进制、16 进制。
- 控制台输出的值为 10 进制。
2 进制的数字以 0b
、0B
开头:
console.log(0b1010); // 10
注意:2 进制的数字只能出现 0
、1
。如果不符合规范 JS 会报错:
let a = 0b12; // 报错
8 进制的数字以 0
、0o
、0O
开头:
console.log(017); // 15
注意:8 进制的数字只能出现 0
~ 7
。
对于以 0
开头的 8 进制的数字,如果不合法 JS 会当成 10 进制的数字处理:
console.log(080); // 80
对于以 0O
、0o
开头的 8 进制的数字,如果不合法 JS 会报错:
console.log(0o80); // SyntaxError: Invalid or unexpected token
16 进制的数字以 0x
、0X
开头:
console.log(0xff); // 255
注意:16 进制的数字可以出现 0
~ 9
、a
~ f
。如果书写不合法 JS 会报错:
console.log(0x2g); // SyntaxError: Invalid or unexpected token
浮点数
-
浮点数只能是 10 进制的。
-
如果整数部分为
0
,可以不写。
console.log(0.35); // 0.35
Infinity
由于内存的限制,JS 能表示的数值范围:
最小数值保存在 Number.MIN_VALUE
中,这个值在多数浏览器中是 5e-324
。
最大数值保存在 Number.MAX_VALUE
中,这个值在多数浏览器中是 1.7976931348623157e+308
。
如果数值超出了 JS 可以表示的范围,就会被自动转换为一个特殊的值:Infinity
/ -Infinity
。
在 JS 中,如果分子为 非 0 值
,分母为 +0
/ -0
/ 0
,则会返回 ± Infinity
。
console.log(1 / 0); // Infinity
Infinity
表示正无穷,-Infinity
表示负无穷。
可以使用 isFinite(xxx)
判断 xxx
是否有限。
isFinite(xxx)
会先将 xxx
转为 Number 类型(相当于用 Number()
转换),再进行判断。
如果 xxx
无穷大 / 无法判断,则返回 false
;如果 xxx
有限大,则返回 true
。
console.log(isFinite(true)); // true
console.log(isFinite(null)); // true
console.log(isFinite(123)); // true
console.log(isFinite(NaN)); // false
console.log(isFinite(Infinity)); // false
console.log(isFinite('123s')); // false
console.log(isFinite(undefined)); // false
NaN
NaN
→ (not a number) 无法用数字表示的结果。
在 JS 中,0
、+0
、-0
相除会返回 NaN
。
console.log(0 / 0); // NaN
可以使用 isNaN(xxx)
判断一个值是否为 NaN
。
isNaN(xxx)
会先将 xxx
转为 Number 类型(相当于用 Number()
转换),再进行判断。
如果 xxx
是 NaN
,则返回 true
;如果 xxx
不是 NaN
,则返回 false
。
console.log(isNaN(true)); // 1 → false
console.log(isNaN(123)); // 123 → false
console.log(isNaN(null)); // 0 → false
console.log(isNaN('123s')); // true
console.log(isNaN(undefined)); // true
字符串
- 用
''
/" "
包裹的值,即字符串。 - 单引号、双引号之间可以嵌套使用,但单引号内不能嵌套单引号、双引号内不能嵌套双引号。
console.log("你笑起来像'花儿'一样好看");
console.log('你笑起来像"花儿"一样好看');
转义符 \
的作用:
- 将特殊字符 → 普通字符。这样就可以嵌套使用任意引号啦。
console.log('我是"超人"'); // 我是"超人"
- 将普通字符 → 特殊字符,以实现指定效果:①
\t
- 缩进、 ②\n
- 换行。
console.log('我是\t超\n人');
// 我是 超
// 人
null 和 undefined
null 表示 no object;undefined 表示 no value。
null 总是与 object 关联。
typeof null; // 'object'
document.getElementById('xxx'); // null
document.parentElement; // null
// 声明 null 的子类
class A extends null {}
// 创建原型对象为 null 的对象
Object.create(null);
typeof undefined; // 'undefined'
let a; // undefined
const obj = {};
obj.a; // undefined