运算符
在ECMAScript与众不同之处在于
1、一元运算符
(1)递增++和递减运算符--
a、前置递增递减——
b、后置递增递减——
(2)前置和后置的区别
a、前置运算符(以++为例)“先运算,再赋值”
var box=100;
var age=++box; //现将box加1(box=101),再赋值给age(age=box=101)
alert(age); //101
b、后置运算符(以++为例)“先赋值,再运算”
var box=100;
var age=box++; //现将box值赋值给age(age=100),box自身再加1(box=101)
alert(age); //100
(3)其他类型的字符串
//1.数值字符串; var box="89"; box++; //box=90,先将数值字符串转换为数值; //2、布尔类型时; var box=false; box++; //false值为0,加1为1; //3、字符串 var box=‘ab’; box++; //由于字符串包含非数值,转为NaN; //4、toString()或valueof时 var box={ toString:function(){return 1;} }; box++; //此时box=1;若是var box={非数值字符串},返回NaN
(4)加和减运算符
var box=100;
+box; //+box为正数,-box为负数
var box=100;
+box;
alert(typeof box); //返回string类型;
var box=100;
alert(typeof +box); //返回number类型;
2、算数运算符
var box=1+1; //2
var box=1+NaN; //NaN;
var box=100+'100'; //此时“+”为字符串连接运算符,只要其中一个为字符串,就不是加法运算符;
var box='你的年龄是:'+10+20; //数值在后边,就不是加法,即为字符串连接;
var box=10+20+'你的年龄是:' //alert(30'你的年龄是:');
var box=10+{};
alert(typeof box); //字符串类型string;
var box={
valueOf:function(){return -1}
};
alert(typeof box); //number;
(2)乘法、除法
(具体的同上)
(3)求模、取余
var box=10%3; //1
var box=10%true; //1;
var box=10%NaN; //NaN;
var box=10%{}; //NaN;
注意:仅在valueof或toString时才可以运算;
3、关系运算符
大多返回的是一个布尔值
(1)两个操作数都为数值,数值比较
(2)两个都是字符串,则比较两个字符串的编码,即ASCII码值
(3)两个操作数一个为数值,先将一个转换为数值,再比较
(4)两个操作数一个为对象,先调用valueOf或toString方法,再用结果比较
var box=3>2; //true;
var box='3'>22; //false;
va box='3'>'22'; //true;
var box='a'>'b'; //false,a—97,b—98;
var box='a'>'B'; //true,B—66;
var box=1>对象; //false
上述案例中,若将数值与对象相比,
var box=1>{
toString:function(){return 0;}
}
alert(box); //true;
4-1、相等运算符
(1)两个操作数均为对象,判断是否指向同一个对象,若是则为true,否则false;
(2)全等和全不等的判断,若值和类型都相等,才返回true
(3)若一个操作数为NaN,则==返回false,!=返回true,并且与自身不相等
(4)若与true、false比较,则true=1,false=0;
(5)若与{...}比较,为false,除非是tostring或valueof
var box={}=={};
//false,比较的应该是他们的地址;
4-2、全等运算符
与相等运算符不同点是:不仅数值相等,数值类型也必须相等。
(1)null==undefined true;
(2)'NaN'==NaN; false;
(3)‘100’==100; true;
(4)'100'===100 false
(5)var box='' ==0; true,空字符串比较,会转换为0
(6)var box=null==0; false,虽说null会转为0,但在进行比较时,null和undefined无自动转化功能
5、逻辑运算符
一般和关系运算符结合起来使用
(1)逻辑与&&
a、等式两边必须同为true,才能返回true