操作符
一元操作符
只能操作一个值的操作符叫做一元操作符。
有递增(++)
和递减(--)
操作符,有两个版本:
- 前置型
- 执行前置递增和递减操作时,变量的值都在语句被求值以前改变的(这种情况被称为副效应)
var age = 29;
var anotherAge = --age + 2;
alert(age); //输出28
alert(anotherAge); //输出30
由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至有被求值,例:
var num1 = 2;
var num2 = 20;
var num3 = --num1 + num2; //等于21
var num4 = num1 + num2; //等于21
- 后置型
- 后置递增递减语法不变,但区别是:即递增递减操作是在包含它们的语句被求值之后才执行的,例:
var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; //等于22
var num4 = num1 + num2; //等于21
- 在应用不同的值时,递增递减遵循以下规则:
- 应用一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减一的操作
- 应用一个不包含有效数字字符的字符串时,将变量值设为NaN。
- 应用一个布尔值false或者true时,先将其转换为0或者1,再执行加减一的操作
- 应用于浮点数时,执行加减一操作
- 应用于对象,先调用对象的valueOf()方法取得一个可操作的值,然后将该值应用前述规则,如果结果NaN,调用toString()方法
var s1 = "2"; s1++; //3
var s2 = "z"; s2++; //NaN
var b = false; b++; //1
var f = 1.1; f--; //0.1000000000009(由于浮点舍入错误导致)
var o = {
valueOf: function(){
return -1;
}
}; o--; //-2
算数操作符
乘法
乘法操作符是由一个(*)表示,用于表示两个数值的乘积处理特殊值,遵循以下规则:
- 如果操作数都是数值,执行常规乘法计算,如果乘积超过数值的表示范围,用Infinity或-Infinity表示;
- 如果有一个操作数是NaN,结果是NaN;
- 如果Infinity与0相乘,结果NaN;
- 如果Infinity与Infinity相乘,结果是Infinity
- 如果Infinity与非0数值相乘,结果是Infinity或者-Infinity;
- 如果有一个操作符不是数值,则调用Number()将其转换为数值。
除法
除法操作符有一个(/)表示,
例:var result = 66/11;
处理特殊值,遵循以下规则:
- 如果操作数都是数值,执行常规除法计算,如果商超过数值的表示范围,用Infinity或-Infinity表示;
- 如果有一个操作数是NaN,结果是NaN;
- 如果0被0除,结果NaN;
- 如果Infinity被Infinity除,结果是NaN
- 如果非零的有限数被零除,结果是Infinity或者-Infinity;
- 如果Infinity被任何非零数值除,结果是Infinity或者-Infinity;
- 如果有一个操作符不是数值,则调用Number()将其转换为数值。
求模
求模(余数)操作符有一个(%)表示,
例:var result = 26 % 5; //等于1
,处理特殊值,遵循以下规则:
- 如果操作数都是数值,执行常规除法计算,返回除得的余数;
- 如果被除数是无穷大值而除数是有限大的值,结果NaN;
- 如果被除数是有限大的数值而除数是零,结果NaN;
- 如果Infinity被Infinity除,结果是NaN;
- 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数;
- 如果被除数是零,则结果是零;
- 如果有一个操作符不是数值,则调用Number()将其转换为数值。
加性操作符
加法操作符用(+)表示。
例: var result = 1 + 2;
处理特殊值,遵循以下规则:
- 如果有一个操作数是NaN,则结果是NaN;
- 如果是Infinity加Infinity,结果是Infinity;
- 如果是-Infinity加-Infinity,结果是-Infinity;
- 如果Infinity加-Infinity,结果是NaN;
- 如果+0加+0,结果是+0;
- 如果-0加-0,结果是-0;
- 如果+0加-0,结果是+0;
- 不过如果有一个操作符是字符串,则应用以下规则:
- 如果两个操作数都是字符串,则拼接起来;
- 如果只有一个操作符是字符串,则将另一个操作符转换为字符串,然后拼接
- 如果有一个操作数是对象,数值或布尔,则调用它们的
toString()
方法取得相应的字符串值,然后再应用前面的关于字符串的规则,对于undefined和null
,则调用String()
函数取得字符串.
var result = 5 + 5;
alert(result); // 10
var result1 = 5 + "5";
alert(result1); // "55"
减法
减法操作符用(-)表示,
var result = 2 - 1;
处理特殊值,遵循以下规则:
- 如果操作数都是数值,执行常规计算,返回结果;
- 如果有一个操作数是NaN,结果NaN;
- 如果是 Infinity 减 Infinity,结果是NaN;
- 如果是 -Infinity 减 -Infinity,结果是NaN;
- 如果是 Infinity 减 -Infinity,结果是 Infinity;
- 如果是 -Infinity 减 Infinity,结果是 -Infinity;
- 如果+0减+0,结果是+0;
- 如果-0减+0,结果是-0;
- 如果-0减-0,结果是+0;
- 如果有一个操作符不是数值,则调用Number()将其转换为数值。在计算
var result1 = 5 - true ; // 4 ,因为true转换为1
var result2 = NaN - 1 ; // NaN
var result3 = 5 - "" ; // 5, 因为""被转换为0
var result4 = 5 - null ; // 5,因为null转换为0
关系操作符
关系操作符用于对两个值得比较,返回时布尔值。包括:
小于(<)、大于(>)、大于等于(>=)、小于等于(<=)
当关系操作数使用了非数值,遵循以下规则:
- 如果两个操作符都是字符串,则比较两个字符转对应的字符编码值;
- 如果一个操作数是数值,将另一个操作数转换为数值,比较;
- 如果一个操作数是对象,则调用valueOf()方法,如果没有valueOf()方法,调用toString()方法,在比较;
- 如果一个操作数是布尔,转换为数值,在比较
相等操作符
ECMAScript提供两组操作符:
相等 和 不相等
----先转换再比较,全等 和 不全等
----仅比较而不转换
相等和不相等
相等操作符有
==
两个等号表示,返回布尔值,不相等操作符由!=
叹号后跟等号组成,这两个操作符先转换再比较(强制转换)
转换遵循基本原则:
- 如果有一个操作符是布尔值,比较前转换为数值0或1
- 如果一个操作数是字符串,另一个是数值,先将字符串转化为数值再比较
- 如果一个操作符是对象,另一个不是,则调用对象的valueOf()方法,得到的基本值用前面的规则比较;
- 两个操作符遵循以下规则:
- null 和 undefined 是相等的
- 比较相等性之前,不能将null 和 undefined转换任何值
- 如果有个操作数是NaN,相等操作符返回false,不相等返回true. NaN不等于NaN
- 如果两个操作数都是对象,比较它们是不是同一个对象,如果都指向同一个对象,则相等操作符返回true;否则,返回false.
- 两个操作符遵循以下规则:
全等和不全等
全等操作符由
===
三个等于号表示,只在两个操作数未经转换就相等的情况下返回true.
var result1 = ("55" == 55) ; //true
var result2 = ("55" === 55) ; //false
不全等操作符由
!==
一个感叹号后跟两个等号表示,在两个操作数未经转换就不相等的情况下返回true
var result1 = ("55" != 55) ; //false
var result2 = ("55" !== 55) ; //true
记住:null == undefined会返回true,因为它们是类似的值,null === undefined会返回false,因为它们不同类型
布尔操作符
布尔操作符一共有三个:
非(NOT) 与(AND) 或(OR).
逻辑非
逻辑非由一个感叹号
!
表示,返回布尔值,逻辑非操作先将其转化为布尔值,然后取非对其求反.
- 如果操作数是一个对象,返回false;
- 如果操作符是一个空字符串,返回true;
- 如果操作符是一个非空字符串,返回false;
- 如果操作符是数值0 ,返回true;
- 如果操作数是任意非0数值(包括Infinity),返回false;
- 如果操作数是null,返回true;
- 如果操作数是NaN,返回true;
- 如果操作数是undefined,返回true;
alert(!false); //true
alert(!"blue"); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
同时使用两个逻辑非(!!)操作,实际上会模拟Boolean()转型函数的行为
逻辑与
逻辑与操作符由两个和号
&&
表示,有两个操作数,例:var result = true && false;
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
逻辑与操作可以应用于任何类型的操作数,不仅仅布尔值,其他数值类型,遵循以下规则:
- 如果第一个操作数是对象,返回第二个操作值;
- 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
- 如果两个数都是对象,返回第二个操作数;
- 如果第一个数null, 返回null;
- 如果第一个操作数是NaN,则返回NaN;
- 如果第一个操作数是undefined,则返回underfined;
逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,不会对第二个操作数求值.
var found = true ;
var result = ( found && someUndefinedVariable ) ; //会发生错误,不能使用未定义的值
alert( result ) ; //这一行不会执行
var found = false ;
var result = ( found && someUndefinedVariable ) ; //不会发生错误,短路操作
alert( result ) ; // 会执行"false"
逻辑或
逻辑或操作符由两个
||
两个竖线符号表示,由两个操作符,例:var result = true || false;
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
与逻辑与操作相似,也遵循类似规则:
- 如果第一个操作数是对象,返回第一个操作值;
- 如果第一个操作数的求值结果为false,则返回第二个操作数;
- 如果两个数都是对象,返回第一个操作数;
- 如果两个操作数都是null, 返回null;
- 如果两个操作数都是NaN,则返回NaN;
- 如果两个操作数都是undefined,则返回underfined;
逻辑或操作也属于短路操作,即如果第一个操作数为true,不会对第二个操作数求值.
var found = true ;
var result = ( found || someUndefinedVariable ) ; //不会发生错误
alert( result ) ; // 会执行"true"
var found = false ;
var result = ( found && someUndefinedVariable ) ; // 会发生错误
alert( result ) ; // 不会执行
条件操作符
语法:variable = boolean_expression ? true_value : false_value;
var max = ( num1 > num2 ) ? num1 :num2 ;
表达式意思是:如果num1>num2(表达式返回true),将num1赋值给max;如果false,将num2赋值给max.
赋值操作符
简单的赋值操作符由等于号
=
表示,作用是把右边的值赋给左边的量,例:var num = 10;
- 如果等号前面再加其他操作符,可以完成复合赋值操作,例:
var num = 10;
num = num + 10; ==> num += 10;
x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x >>= y // 等同于 x = x >> y
x <<= y // 等同于 x = x << y
x >>>= y // 等同于 x = x >>> y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
x ^= y // 等同于 x = x ^ y
逗号操作符
逗号操作符可以在一条语句中执行多个操作,
例:var num1 = 1, num2=2, num3=3;
- 逗号操作符多用于声明多个变量,除此之外,还可以赋值.用于赋值时,逗号操作符总会返回表达式中最后一项
var num = ( 5 , 1 , 4 , 8 , 0) ; //num值为0
虽然不常见,但是这个例子可以理解逗号的这种行为
对象操作符
- new
- 可以获取一个对象示例
- delete
- 可以删除一个对象的属性
-
.
- 获取对象属性
- []
- 获取对象属性的值
- instanceof
- 判断某个变量是否是某个对象的实例
- in
- 判断某个属性是否在对象中
参考
- 相等操作符“==”详细的类型转换,可以参考下JavaScript中的相等性判断
- 关于操作符的优先级,可以参考下运算符优先级
这些都是一些常见的操作符,好好掌握,嘿嘿,还有 位操作符 还没太熟练,在研究一下,继续努力
网友评论