运算符
一元运算符:只能操作一个值的运算符
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
一元运算符
1、递增++和递减--
var box = 100; ++box; //把box累加一个1,相当于box=box+1 --box; //把box累减一个1,相当于box=box-1 box++; //同上 box--; //同上
2、前置和后置的区别
在没有赋值操作,前置和后置是一样的。但在赋值操作时,如果递增或递减运算符前置,那么前置的运算符会先累加或累减再赋值,如果是后置运算符则先赋值再累加或累减。
var box = 100; var age = ++box; //age的值为101 var height = box++; //height值为100
3、其他类型应用一元运算符的规则
var box = '89'; box++; //90,数值字符串自动转换成数值 var box = 'ab'; box++; //NaN,字符串包含非数值转成NaN var box = false; box++; //1,false转成数值是0,累加就是1 var box = 2.3; box++; //3.3,直接加1 var box = { //1,不设置toString或valueOf即为NaN toString: function() { return 1; } }; box++;
4、加和减运算符
加运算规则如下:
var box = 100; +box; //100,对于数值,不会产生任何影响 var box = '89'; +box; //89,数值字符串转换成数值 var box = 'ab'; +box; //NaN,字符串包含非数值转成NaN var box = false; +box; //0,布尔值转换成相应的数值 var box = 2.3; +box; //2.3,没有变化 var box = { //1,不设置toString或valueOf即为NaN toString: function() { return 1; } }; +box;
减运算规则如下:
var box = 100; -box; //-100,对于数值,直接变负 var box = '89'; -box; //-89,数值字符串转换成数值 var box = 'ab'; -box; //NaN,字符串包含非数值转成NaN var box = false; -box; //0,布尔值转换成相应的数值 var box = 2.3; -box; //-2.3,没有变化 var box = { //-1,不设置toString或valueOf即为NaN toString: function() { return 1; } }; -box;
正运算符和负运算符可像上面进行类型转换
算术运算符
ECMAScript定义了5个算术运算符,加减乘除求模(取余)
如果在算术运算的值不是数值,那么后台会先使用Number转型函数将其转换为数值(隐式转换)
1、加法
var box = 1 + 2; //等于3 var box = 1 + NaN; //NaN,只要有一个NaN就为NaN var box = Infinity + Infinity; //Infinity var box = -Infinity + -Infinity; //-Infinity var box = Infinity + -Infinity; //NaN,正无穷和负无穷相加等于NaN var box = 100 + '100'; //字符串连接符,有字符串就不是加法 var box = '您的年龄是:' + 10 + 20; //您的年龄是:1020,被转换成字符串 var box = 10 + 20 +'是您的年龄'; //30是您的年龄,没有被转换成字符 var box = '您的年龄是:' + (10 + 20); //您的年龄是:30,没有被转换成字符串 var box = 10 + 对象; //10[object Object],如果有toString()或valueOf()则返回 10+返回的数值
2、减法
var box = 100 - 70; //等于30 var box = -100 - 70; //等于-170 var box = -100 - -70; //-30,一般写成-100 - (-70)比较清晰 var box = 1 - NaN; //NaN,只要有一个NaN就为NaN var box = Infinity - Infinity; //NaN var box = -Infinity - -Infinity; //NaN var box = Infinity - -Infinity; //Infinity var box = -Infinity - Infinity; //-Infinity var box = 100 - true; //99,true转成数值为1 var box = 100 - ''; //100,''转成了0 var box = 100 - '70'; //30,'70'转成了数值70 var box = 100 - null; //100,null转成了0 var box = 100 - 'Lee'; //NaN,Lee转成了NaN var box = 100 - 对象; //NaN,如果有toString()或valueOf()则返回 10-返回的数值
3、乘法
4、除法
5、求模(取余)
关系运算符
== !==
比较运算符的时候,遵循以下规则:
1)对象和对象(所指代的不是同一个对象)永远不相等
2)对象和字符串 先将对象转换为字符串(toString),然后进行比较。 []变为"" {}变为"[object Object]"
3)对象和布尔类型
对象转换为字符串(toString),再换成数字(Number),布尔类型也变为数字,再进行比较。
4)对象和数字 对象转成字符串(toString),再换成数字(Number),然后再比较
5)数字和布尔类型 布尔类型转换为数字
6)数字和字符串 字符串转换为数字
7)字符串和布尔 都转为数字
8)null和undefined是相等的(==)
9)null或undefined,NaN和其他任何类型都不相等
0 NaN undefined null '' 在默认情况下会转换为false
"" " " false null [] 在默认情况下会变为0
表达式 | 值 |
null == undefined | true |
'NaN' == NaN | false |
5 == NaN | false |
NaN == NaN | false |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
'100' == 100 | true |
'100' === 100 | false |
=== 比较的两边不存在任何的数据类型转换,值且类型都要相等。