in
var trees = new Array("redwood", "baby", "cedar", "oak", "maple");
0 in trees // 返回 true
3 in trees // 返回 true
6 in trees // 返回 false
"baby" in trees // 返回 false(必须使用索引号,而不是数组元素的值)
"length" in trees // 返回 true(length是一个数组属性)
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+ +"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() 方法并将得到的字符串转换为数值。