首页 > js学习 > js基础知识 > javascript中运算符的常见问题
2016
12-16

javascript中运算符的常见问题

算术运算符(+,-,*,/,%)中的特殊情况:

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=:赋值、运算赋值

,:多重赋值、数组元素

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。