运算符
1、一元运算符
2、算术运算符(+、-、*、/)
3、关系运算符
4、相等运算符、全等运算符
5、逻辑运算符
6、位运算符(省略,不详细介绍)
7、赋值运算符
8、其他运算符
9、运算符优先级
在ECMAScript与众不同之处在于
运算符可以适用于很多值,例如字符串、数字值、布尔值,甚至对象。
不过,在运用对象时,会调用对象的两种方法,以便获得可操作的值,如下:
(1)valueof()
(2)toString()
1、一元运算符
只能操作一个值的运算符
(1)递增++和递减运算符--
var box=100;
a、前置递增递减——
++box; //把box累加1,类似于box=box+1;(box=101)
--box; //把box累减1,类似于box=box-1;(box=99)
b、后置递增递减——
box++; //同上
--box; //同上
(2)前置和后置的区别
a、前置运算符(以++为例)“先运算,再赋值”
示例1:
var box=100;
var age=++box; //现将box加1(box=101),再赋值给age(age=box=101)
alert(age); //101
b、后置运算符(以++为例)“先赋值,再运算”
示例2:
var box=100;
var age=box++; //现将box值赋值给age(age=100),box自身再加1(box=101)
alert(age); //100
(3)其他类型的字符串
示例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)加和减运算符
示例4:
var box=100;
+box; //+box为正数,-box为负数
示例5
var box=100;
+box;
alert(typeof box); //返回string类型;
var box=100;
alert(typeof +box); //返回number类型;
2、算数运算符
(1)加法、减法——以加法为例
示例1:
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+20) //'你的年龄是:30'
示例2:
var box=10+{};
alert(typeof box); //字符串类型string;
若想返回数值,即必须为toString()valueof类型
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
b、若第二个为对象时,第一个为true,则返回第二个对象,否则返回false
var box=(5>4)&&{}; //object[];
c、若一个为null,返回null,
d、若一个为undefined,则返回undefined
(2)逻辑或||
a、只要等式一边为true,整体就返回true,等式两边都为false,返回false
b、第一个操作数为对象,返回第一个操作数
c、等式两边均为对象,返回第一个对象;
d、等式两边为null或undefined,返回null、undefined
(3)逻辑非!
一般情况下,返回的是布尔值true或false
a、一次取反——操作:先转型,再取反
var box=!(5>4); false;
b、两次取反——操作:再取反,再一次取反(得到原型的布尔值)
var box=!!(5>4); true;
6、位运算符
(由于基本用不到,所以不做详细的介绍,省略)
7、赋值运算符
(1)简单的,用“=”表示,将右侧值赋值给左侧的变量
var box=100;
(2)复杂的复合运算
+=、-=、/=、*=、%=
8、其他运算符
(1)逗号运算符
逗号运算可以在一条语句中执行多个操作
var box=100,age=20,height=167; //变量
var box=(1,2); //数组
var box={1:2,2:3,3:4}; //对象
(2)字符串运算符
用于将字符串连接起来(如“+”)
(3)三元运算符(条件运算符)
var box=5>4 ? true:false;
9、运算符优先级
一般运算不考虑运算符优先级,若要考虑,可对变量用括号连接,提高优先级级别
var box=5+2*2; //9
var box=(5+2)*2; //14