1、运算符:
n++ ,++n ;在没有赋值的情况下两者一样,都是加1;
若是赋值,运算符前置表示先加再赋值,运算符后置表示先赋值再加。
如:var m = 10;
var m1 = ++m; 值为11
var m2 = m++;
var box = false; 布尔值会自动转换成相应数值0( false:0; true:1 )
+box;值为1
2、运算操作数的规则:
1)一个操作数是布尔值,则比较之前将其转换为数值,false转换为0,true转换为1
eg.var box = false ==0;//true
2)一个操作数是字符串,则比较之间将其转换为数值再比较(a=97,b=98,B=66)
eg.var box = 'a' == 'B';//false(a=97,B=66)
3)一个操作数是对象,则先调用valueOf()或toString()方法再和返回值比较
eg.var box = 2 == {};//false;
4)无需任何转换的条件下,null与 undefined相等。
5)一个操作数是NaN,则==返回false,!=返回true,且NaN与自身不等。(非数值类型会转换为NaN)
eg.var box = 2 == NaN;//false
6)两个操作数都是对象,则比较是否是同一个对象,若是返回true,否则返回false
7)在全等和不等的判断上,如值和类型都相等,才返回true,否则返回false.
3、逻辑运算符:&&(and)、||(or)、!(not)
3.1 && 两边都为true才返回true
运算符两边其中之一操作数不是布尔值就遵循以下规则:
1)第一个操作数是对象,则返回第二个操作数;
eg.var box = 对象 && (5>1);//返回true(因为5>1为真)
2)第二个操作数是对象,则第一个操作数返回true后才返回第二个操作数,否则直接返回false。(相当于只看第一个操作数,若为真就返回第二个操作数,若为假,第二个无论真假都返回false)
eg. var box = (6>1) && 对象;//返回[Object].因为6>1是第一个操作数为真
var box = (3>8) && 对象;//返回false,因为3>8是第一个操作数为假。
3)有一个操作数是null,返回null
eg. var box = (3>1) && null //返回null
4)有一个操作数是undefined,则返回undefined
eg. var box = (3>5) && undefined //返回undefined
3.2 || 两边只要有一边为true就返回true。
运算符两边其中之一操作数不是布尔值就遵循以下规则:
1)第一个操作数是对象,则返回第一个操作数
eg.var box = 对象 || (4>1);//[Object].
2)第一个操作数的求值结果为false,就返回第二个操作数(相当于要是第一个操作数求值结果是true,直接不对第二个操作数求值)
eg.var box = (3>1) || (5>2);//true
var box = (5>3)|| 对象;//true (5>3为true,直接返回true,对象直接忽略)
3)两个操作数是null,返回null;是NaN ,就返回NaN; undefined就返回undefined
eg.var box = undefined || undefined; //undefined;
var box = null || null;//null
var box = NaN || NaN; //NaN
逻辑或用途:var box = oneObject || twoObject ;//把其中一个有效变量赋值给box
3.3 ! not 将要运算的值转换为布尔值,然后取反
1)操作数是一个对象,返回false;
eg. var box = !{};//false
2)操作数是一个空字符串,返回true;
eg. var box = !'';//true
3)操作数是一个非空字符串,返回false
eg. var box = !'hello';//false
4)操作数是数值0,返回true
eg. var box = !0;//true (0=false)
5)操作数是任意非0数值;返回false
eg. var box = !8;//false
6)操作数是null、NaN、undefined,返回true
eg. var box = !null;//true
var box = !undefined;//true
var box = !NaN;//true
7)两次逻辑非运算表示取反再取反(相当于对值进行Boolean()转型函数处理)
eg. var box = !!false;//false
var box = !!NaN;//false
4、赋值运算符(等号右边的值赋值给左边的变量)
var box = 100;
box += 100; 相当于box = box + 100;(运算赋值)//box=200
5、三元条件运算符
var box = 5 > 4 ? '对':'错';//对(条件成立就取问号后面的值,不成立就取冒号后面的值)