你不知道的javascript摘要

160 阅读2分钟

数据类型

number: 类型转换规则:

  1. undefined ---> NaN

  2. 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"

-- | ++

  1. 我们知道,所有的运算符都有返回值。自增/自减也不例外。前置形式返回一个新的值,但后 置返回原来的值(做加法/减法之前的值)。
  2. 自增/自减只能应用于变量。试一下,将其应用于数值(比如 5++)则会报错

逗号运算符

  1. 逗号运算符能让我们处理多个语句,使用 , 将它们分开。每个语句都运行了但是只有最后的语句的结果会被返回。
  2. 逗号运算符的优先级非常低,比 = 还要低,因此在运算的时侯放在()里非常重要。
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!');