数据类型
number: 类型转换规则:
-
undefined ---> NaN
-
null--->0
Boolean:非空的字符串总是 true
- '0' ---> true,
- 0---> false null === undefined null == undefined
运算
求幂运算 a ** b 是 a乘以自身 b 次。
alert( 2 ** 2 ); // 4 (2 * 2,自乘 2 次)
7 / 0 = Infinity
" -9 " + 5 = " -9 5"
-- | ++
- 我们知道,所有的运算符都有返回值。自增/自减也不例外。前置形式返回一个新的值,但后 置返回原来的值(做加法/减法之前的值)。
- 自增/自减只能应用于变量。试一下,将其应用于数值(比如
5++
)则会报错
逗号运算符
- 逗号运算符能让我们处理多个语句,使用
,
将它们分开。每个语句都运行了,但是只有最后的语句的结果会被返回。 - 逗号运算符的优先级非常低,比
=
还要低,因此在运算的时侯放在()里非常重要。
let a = (1 + 2, 3 + 4);
alert( a ); // 7(3 + 4 的结果)
如果没有圆括号:相当于 (a = 1 + 2), 3 + 4。然后逗号之后的数值 7 不会再执行,它被忽略掉了
空值合并运算符 ??
a ?? b
的结果是:
- 如果
a
是已定义的,则结果为a
, - 如果
a
不是已定义的,则结果为b
。
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
??
运算符的优先级相当低:在 MDN table 中为5
。因此,??
在=
和?
之前计算,但在大多数其他运算符(例如,+
和*
)之后计算。因此,如果我们需要在还有其他运算符的表达式中使用??
进行取值,需要考虑加括号:
出于安全原因,JavaScript 禁止将 `??` 运算符与 `&&` 和 `||` 运算符一起使用,除非使用括号明确指定了优先级。
let x = 1 && 2 ?? 3; // Syntax error
*let x = (1 && 2) ?? 3; // 正常工作了*
标签 循环
outer: for (let i = 0; i < 3; i++)
{ for (let j = 0; j < 3; j++) {
let input = prompt(`Value at coords (${i},${j})`, ''); // 如果是空字符串或被取消,则中断并跳出这两个循环。
if (!input) break outer; // (*) // 用得到的值做些事…… } } alert('Done!');