结合性 P69
一元操作符,赋值和三元条件运算符具有从左到右的结合性
1 | x = ~-y; |
javascript 总是严格的按照从左到右的顺序计算表达式 P69
计算b的值:
a=1; b = (a++) + a;
- 计算
b
- 计算
a++
(假设其值为c)- 计算
a
- 计算
c + a
- 将
c + a
的值赋值给b
其中 第2步 先
c = 1;
然后a = a + 1;
所以第3步的a = 2
所以b = 3
‘+’ 运算符 P70
加法的转换规则优先考虑字符串转换,如果其中一个操作数是字符串或者转换为字符串的对象,另一个操作符会转换为字符串
如果2个操作数都不是类字符串,进行算数加法运算
转换规则见上一篇的类型转换和对象转字符串_数字
1 | '1' + '2' = '12'; |
一元算数运算符
‘++’ 将操作数转换为数字,然后给数字加1
1 | var x = '1'; |
逻辑与 && P79
假值:
false
null
undefined
0
-0
NaN
''
- 先计算左操作数的值,如果为假值,则返回左操作数
- 如果为真值, 计算右操作符并将其返回
1 | console.log(1 && NaN); // NaN |
1 | // 假设 fun 为某函数 |
逻辑或 || P80
- 先计算左操作数的值,如果为真值,则返回左操作数
- 如果为假值, 计算右操作符并将其返回
1 | console.log({x: '左'} || {x: '右'}); // { x: '左' } |
1 | // 给参数提供默认值 |
eval P84
eval使用了调用它的变量作用域环境
typeof P87
x | typeof x |
---|---|
undefined | ‘undefined’ |
null | ‘object’ |
true/false | ‘boolean’ |
数字/NaN | ‘number’ |
字符串 | ‘string’ |
函数 | ‘function’ |
内置对象(非函数) | ‘onject’ |
宿主对象 | 由编译器各自实现的字符串, 但不是 ‘undefined’ ‘boolean’ ‘number’ ‘string’ |
参考资料:
http://segmentfault.com/a/1190000002423935
文章若有纰漏请大家补充指正,谢谢~~