运算符

运算符(操作符):

var box=100;
++box; //前置递增 相当于box=box+1
alert(box); //101

var box=100;
--box; //前置递减 相当于box=box-1
alert(box); //99


var box=100;
box++; //后置递增 相当于box=box+1
alert(box); //101

var box=100;
box--; //后置递减 相当于box=box-1
alert(box); //99


前置和后置的区别:
在没有赋值操作,前置和后置是一样的,但在赋值操作时,如果前置,则先累加或累减再赋值
,如果是后置运算符,则先赋值再累加或累减。
var box=100;
var age=++box; //先box累加到101,然后赋值给age
alert(age); //101

var box=100;
var age=box++; //先box赋值给age,然后box再累加到101
alert(age); //100

其它类型应用一元运算符的规则:
var box='89';box++; //90,数值字符串自动转换成数值
var box={
valueOf:function(){
return 123;
}
};
box++;
alert(box); //124

var box={
toString:function(){
return 123;
}
};
box++;
alert(box); //124

var box={
toString:function(){
return 'Kee';
}
};
box++;
alert(box); //NaN

//+ 和 - 是取正或者取负

var box='89';
alert(typeof +box); //Number
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={
toString:function(){
return 1;
}
};
alert(+box); //1

-----------------------------------------------------------------------------------
-
算数运算符:共5种,加减乘除求模(取余)
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' //100100,字符串连接符,有字符串就不是加法
var box='您的年龄是:'+10+20;您的年龄是:1020
var box=10+20+'是您的年龄';//30是您的年龄
var box='您的年龄是:'+(10+20);//您的年龄是:30
var box=10+对象;//10[objectObject],是string类型,如果有toString()或valueOf()则返
回10+返回数的值

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-返回数的值

var box=100*NaN;//NaN,只要有一个NaN即为NaN
var box=Infinity*Infinity; //Infinity
var box=-Infinity*Infinity; //-Infinity
var box=-Infinity*-Infinity; //Infinity
var box=100*true; //100,true转成数值为1
var box=100*'';//0,''转成了0
var box=100*null;//0,null转成了0
var box=100*'Lee';NaN,Lee转成了NaN
var box=100*对象; //NaN

var box=100/NaN; //NaN
var box=Infinity/Infinity; //NaN
var box=-Infinity/Infinity; //NaN
var box=-Infinity/-Infinity; //NaN
var box=100/true;//100,true转成1
var box=100/'';//Infinity
var box=100/null;//Infinity
var box=100/'Lee';//NaN
var box=100/对象;//NaN

var box=100%NaN; //NaN
var box=Infinity%Infinity; //NaN
var box=-Infinity%Infinity; //NaN
var box=-Infinity%-Infinity; //NaN
var box=100%true; //0
var box=100%'';//NaN
var box=100%null;//NaN
var box=100%'Lee';//NaN
var box=100%对象;//NaN


var box='3'>22; //如果只有一个数值字符串,那么会将它转换成数值,再比较。
var box='3'>'22'; //如果两个都是数值字符串,那么会进行第一个字符的比较,3>2
两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较。

两个操作数都是字符串,则比较ascii码:
var box='a'>'b'; //97>98 false

var box=false==0; //true
var box='2'==2; //true,'2'会转成数值2
var box=2==NaN; //false,只要有NaN,都是false
var box={}=={};//false,比较的是他们的地址,每个新创建对象的引用地址不同
var box=null==null;//true
var box=null==undefined;//true
var box=undefined==undefined;//true

var age={};
var height=age;
alert(age==height); //true

var box=null==0;//false,null自动转换为0,但在比较运算上,null和undefined没有自动转
换,所以null不等于0
alert(!!null==0);//true;
var box=''==0; //字符串在比较的时候,会自动转换

逻辑运算符:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)
var box=0 && {}; //第二个是对象的时候,第一个如果是true,则返回第二个对象,否则返回
false
var box={}&&5; //5 ,第一个操作数是对象,则返回第二个操作数;
var box=5>4 && null; //有一个操作数是null,则返回null
var box=null&&5>4; //有一个操作数是null,则返回null
var box=5>4 && undefined; //有一个操作数是undefined,则返回undefined
var box=undefined && 5>4; //有一个操作数是undefined,则返回undefined
var box=3>4&&undefined; //如果第一个操作数是false,则不去运行第二个操作数了
逻辑与运算符属于短路操作。


var box=(5>3)||(3>4) //||运算符,只有一边是true,那么整体返回就是true
var box={}||(5>3) //第一个操作数是对象,则返回第一个操作数
var box=(3>4)||5 //5 第一个操作数的求值结果为false,则返回第二个操作数。
var box={}||{} // [object Object] 两个操作数都是对象,则返回第一个操作数
var box=null||null //两个操作数都是null,则返回null
两个操作数都是NaN,则返回NaN
两个操作数都是undefined,则返回undefined
逻辑或运算符也是短路操作,当第一个操作数的求值结果为true,就不会对第二个操作数求值
了。

var box=!!{}; //Boolean({}),!!{}是一样的结果
var box=!''; //true
var box=!null; //true
var box=!NaN; //true
var box=!undefined; //true
-----------------------------------------------------------------------------------
-
位运算符:7种
位非NOT(~)、位与AND(&)、位或OR(|)、位异或XOR(^)、左移(<<)、有符号右移(>>)、无
符号右移(>>>)。

-----------------------------------------------------------------------------------
-
赋值运算符 var box=100
复合赋值运算符 box=box+100 相当于 box+=100

 

posted @ 2017-07-10 13:51  耿鑫  阅读(144)  评论(0编辑  收藏  举报