in

  1. var trees = new Array("redwood", "baby", "cedar", "oak", "maple");
  2. 0 in trees // 返回 true
  3. 3 in trees // 返回 true
  4. 6 in trees // 返回 false
  5. "baby" in trees // 返回 false(必须使用索引号,而不是数组元素的值)
  6. "length" in trees // 返回 true(length是一个数组属性)
  7. Symbol.iterator in trees // 返回true(数组可迭代,只在ES2015+上有效)

运算符

优先级

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

加法

如果两个操作符都是数值,执行常规的加法计算:

  • 如果有一个操作数是 NaN ,则结果是 NaN。
  • 如果是 Infinity 加 Infinity ,则结果是 Infinity 。
  • 如果是 -Infinity 加 -Infinity ,则结果是 -Infinity 。
  • 如果是 Infinity 加 -Infinity ,则结果是 NaN 。
  • 如果是 +0 加 +0 ,则结果是 +0 。
  • 如果是 -0 加 -0 ,则结果是 -0 。
  • 如果是 +0 加 -0 ,则结果是 +0 。

如果有一个操作数是字符串,那么就要应用如下规则:

  • 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来。
  • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。

如果有一个操作数是对象、数值或布尔值,则调用它们的 toString() 方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于 undefined 和 null ,则分别调用 String() 函数并取得字符串 “undefined” 和 “null” 。

  1. 1+ +"2"+"2" // "32" 第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +"2"相当于1+2=3.

减法

  • 如果两个操作符都是数值,则执行常规的算术减法操作并返回结果。
  • 如果有一个操作数是 NaN ,则结果是 NaN 。
  • 如果是 Infinity 减 Infinity ,则结果是 NaN 。
  • 如果是 -Infinity 减 -Infinity ,则结果是 NaN 。
  • 如果是 Infinity 减 -Infinity ,则结果是 Infinity 。
  • 如果是 -Infinity 减 Infinity ,则结果是 -Infinity 。
  • 如果是 +0 减 +0 ,则结果是 +0 。
  • 如果是 -0 减 +0 ,则结果是 -0 。
  • 如果是 -0 减 -0 ,则结果是 +0 。
  • 如果有一个操作数是字符串、布尔值、null 或 undefined ,则先在后台调用 Number() 函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN ,则减法的结果就是 NaN 。
  • 如果有一个操作数是对象,则调用对象的 valueOf() 方法已取得表示该对象的数值。如果得到的值是 NaN ,则减法的结果就是 NaN 。如果对象没有 valueOf() 方法,则调用其 toString() 方法并将得到的字符串转换为数值。