算术运算符(+,-,*,/,%)中的特殊情况:
var box = Infinity + Infinity; //Infinity
var box = -Infinity + -Infinity; //-Infinity
var box = Infinity + -Infinity; //NaN,正无穷和负无穷相加等NaN
var box = 100 + '100'; //100100,字符串连接符,有字符串就不是加法
var box = '您的年龄是:' + 10 + 20; //您的年龄是:1020,被转换成字符串
var box = 10 + 20 + '是您的年龄'; //30是您的年龄,没有被转成字符串
var box = '您的年龄是:' + (10 + 20); //您的年龄是:30,没有被转成字符串
var box = 100 + true; //101,true转成数值为1
var box = 100 + ''; //100,''转成了0
var box = 100 - null; //100,null转成了0
关系运算符(>,<,>=,<=,==,!=,===,!==)操作非数值时要遵循一下规则:
1.两个操作数都是数值,则数值比较;
2.两个操作数都是字符串,则比较两个字符串对应的字符编码值;
3.两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较;
4.两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较;
特殊值
null == undefined:true
NaN == NaN:false
false == 0:true
true == 1:true
true == 2:false
undefined == 0:false
null == 0:false
'100' == 100:true
逻辑运算符(&&,||,!)
1、逻辑和运算中:如果两边的操作数有一个操作数不是布尔值的情况下,与运算就不一定返回布尔值,此时,遵循以下规则:
1.第一个操作数是对象,则返回第二个操作数;
2.第二个操作数是对象,则第一个操作数返回true,才返回第二个操作数,否则返回false;
3.有一个操作数是null,则返回null;
4.有一个操作数是undefined,则返回undefined。
逻辑与运算符属于短路操作,顾名思义,如果第一个操作数返回是false,第二个数不管是true还是false都返回的false。
var box = true && age; //出错,age未定义
var box = false && age; //false,不执行age了
2、逻辑或运算中:如果两边的操作数有一个操作数不是布尔值的情况下,逻辑与运算就不一定返回布尔值,此时,遵循以下规则:
1.第一个操作数是对象,则返回第一个操作数;
2.第一个操作数的求值结果为false,则返回第二个操作数;
3.两个操作数都是对象,则返回第一个操作数;
4.两个操作数都是null,则返回null;
5.两个操作数都是NaN,则返回NaN;
6.两个操作数都是undefined,则返回undefined;
和逻辑与运算符相似,逻辑或运算符也是短路操作。当第一操作数的求值结果为true,就不会对第二个操作数求值了。
var box = true || age; //true
var box = false || age; //出错,age未定义
我们可以利用逻辑或运算符这一特性来避免为变量赋null或undefined值。
3、逻辑非运算中:无论值是什么数据类型,这个运算符都会返回一个布尔值。先将这个值转换成布尔值,然后取反
1.操作数是一个对象,返回false;
2.操作数是一个空字符串,返回true;
3.操作数是一个非空字符串,返回false;
4.操作数是数值0,返回true;
5.操作数是任意非0数值(包括Infinity),false;
6.操作数是null,返回true;
7.操作数是NaN,返回true;
8.操作数是undefined,返回true;
运算符优先级
在一般的运算中,我们不必考虑到运算符的优先级,因为我们可以通过圆括号来解决这种问题。
但如果没有使用圆括号强制优先级,我们必须遵循以下顺序:
. [] ():对象成员存取、数组下标、函数调用等
++ -- ~ ! delete new typeof void:一元运算符
* / % **:乘法、除法、取模、求幂
+ - +:加法、减法、字符串连接
<< >> >>>:移位
< <= > >= instanceof:关系比较、检测类实例
== != === !==:恒等(全等)
&:位与
^:位异或
|:位或
&&:逻辑与
||:逻辑或
?::三元条件
= x=:赋值、运算赋值
,:多重赋值、数组元素
- 本文固定链接: https://www.qingheluo.com/javascriptzhongdeyunsuanfu/
- 转载请注明: qingheluo 于 清河洛 发表