JS运算(一)

运算符

一元运算符:只能操作一个值的运算符

算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

其他运算符

一元运算符

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

=== 比较的两边不存在任何的数据类型转换,值且类型都要相等。

原文地址:https://www.cnblogs.com/crazier/p/13348179.html