javascript变量运算符详解
1.运算符
JavaScript中常见的运算符包含:赋值运算符、算数运算符、等性运算符、关系运算符、条件运算符、布尔运算符、逻辑运算符……
1.赋值运算符 =
赋值运算符“=”,用于给某个变量赋值。
代码示例:
var x; x=5; //把数字 5 赋值给变量x x='hello'; //把字符串 hello 赋值给x
除了简单的赋值运算符“=”之外,还有一种常用的复合赋值运算符
1.1 加法/赋值运算符 +=
加法赋值运算符x+=y,等价于x=x+y,它是一种简写形式。
代码示例:
var x=5; x+=1; //等价于 x=x+1; console.log(x); //6
1.2 减法/赋值运算符 -=
减法赋值运算符x-=y,等价于x=x-y,它是一种简写形式。
代码示例:
var x=5; x-=1; //等价于 x=x-1; console.log(x); //4
2.算数运算符
JavaScript中的算数运算符主要用在数字类型变量的数学运算,包含加法、减法、乘法、除法、取余等等。
代码示例:
var x=5,y=2; console.log(x+y); //加法运算,结果:7 console.log(x-y); //减法运算,结果:3 console.log(x*y); //乘法运算,结果:10 console.log(x/z); //除法运算,结果:2.5 console.log(x%y); //取余运算,结果:1, 5除以2,商为2,余数为1
3.等性运算符
等性运算符主要用于判断两个变量的值和类型是否相等。判断返回的结果为一个布尔值。
3.1等号和非等号
在JavaScript中等号由双等号(==)表示,当双等号两边运算数相等时,返回结果为true。
代码示例:
var x=5,y=5,z=9; console.log(x==y); //true console.log(x==z); //false
非等号由感叹号加等号(!=)表示,当非等号两边的运算数不相等时,返回结果为true。
代码示例:
var x=5,y=5,z=9; console.log(x!=y); //false console.log(x!=z); //true
注意:在比较两个运算数是否相等时,JavaScript引擎会将这两个运算数进行类型转换
执行类型转换的规则如下:
- 布尔值转换成数字:false转换成0,true转换成1.
- 数字与字符串:字符串转换成数字。
- 对象与字符串:把对象转换成字符串。
- 对象与数组:把对象转换成数组。
在比较时,对于一些特殊的运算数,遵守以下规则:
- null和undefined相等。
- 不能把null和undefined转换成其他值。
- 只要有一个运算数是NaN,等号返回false,非等号返回true。
- 如果两个运算数都是对象,比较的是他们的引用值。
- 如果两个运算数指向同一对象,等号返回true。
- 即使两个数都是NaN,等号仍然返回false。
特殊的情况:
表达式 | 返回值 |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN !=NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
3.2全等号和非全等号
全等号和非全等号所做的事与等号和非等号相同,只是在检查相等性前,不执行类型转换
全等号由三个等号表示(===),检查时不仅要值相等,更要类型相等。
代码示例:
var x=5; var y='5'; console.log(x==y); //等号检查,类型转换后返回 true console.log(x===y); //全等检查,由于x时number类型,y时string类型,类型不同,返回false
4.关系运算符
关系运算符执行的是比较运算,通常用于判断两个变量哪个大?哪个小?关系运算符都返回一个布尔值。
常用的关系运算符有大于(>)、小于(<)、大于等于(>=)、小于等于(<=)
代码示例:
var x=5,y=3,z=5; console.log(x>y); //true console.log(x<y); //false console.log(x>=z); //true console.log(x<=z); //true
4.1字符串与字符串之间的关系比较
对于数字类型的变量关系比较我们遵循数学原则,但是对于字符串类型的变量,如去要进行关系比较则需按照ASCII码;
ASCII码对照表见下图:
代码示例:
var x="Hello",x="world"; console.log(x>y); //false
如上述代码所示,如果我们要比较Hello和world这两个字符串,首先比较首字符的大小,对照ASCII字符编码表,H的十进制编码为72,w的十进制编码为119,所以变量x应该是小于变量y,故而上面代码返回结果为false。
4.2数字与字符串之间的关系比较
当一个字符串与数字进行关系比较时,JavaScript引擎会将字符串转换成数字,然后按照数字顺序比较它们。
代码示例:
var x="30",y=5; console(x>y); //true
在上述示例代码中,字符串"30"将被转换成数字30,然后与数字5进行比较。
但是,如果字符串不能转换成数字又该如何呢?
var x="hello",y=9; console.log(x>y); //false
字符串"hello"不能转换成有意义的数字,所以在类型转换的时候返回的是NaN。
==任何包含NaN的关系运算都要返回false==,因此上述代码也输出false。
5.条件运算符(三元运算符)
条件运算符又称为三元运算符,它在JavaScript中是一个既有比较又有赋值的运算符。语法如下:
var x=booleanExpressin ? trueValue : falseValue;
该运算符的意思是:根据booleanExpressin条件表达式的计算结果,如果条件表达式返回的结果为true,则把trueValue赋值给x,如果条件表达式返回的结果为false,则把falseValue赋值给变量。
代码示例:
var x=5,y=10; var z=(x>y)?x:y; console.log(z); //10
6.逻辑运算符
JavaScript中的逻辑运算符有三种:NOT(取反)、AND(逻辑与)和OR(逻辑或)
在进行逻辑运算之前,JavaScript会将变量转换成布尔类型。因此我们需要了解一下不同类型的变量转换为布尔类型时的逻辑值:
参数 | 说明 | 转换结果 |
---|---|---|
"" | 空字符串 | false |
"hello" | 非空字符串 | true |
" " | 空格 | true |
0 | 数字0 | false |
5.5 | 非零正数 | true |
-4 | 非零负数 | true |
null | false | |
NaN | false | |
undefined | false | |
Object | 对象 | true |
Array | 数组 | true |
6.1 NOT 取反
逻辑 NOT 取反运算符,意思是得到与当前参数相反的结果,由感叹号(!)表示,取反运算符返回的一定是布尔值。
注意:如果运算数是undefined,发生错误。
代码示例:
var bFalse = false; var sRed = "red"; var iZero = 0; var iThreeFourFive = 345; var oObject = new Object(); console.log(!bFalse); //true console.log(!sRed); //false console.log(!iZero); //true console.log(!iThreeFourFive); //false console.log(!oObject); //false
6.2 AND 逻辑与
逻辑与AND运算符,进行运算时需要两个参数,只有当两个参数转换都为true时,逻辑与才返回true。逻辑与AND运输符用双和号(&&)表示。
代码示例:
var x=true,y=false; console.log(x&&y); //false
注意:逻辑与AND运算的运算数可以是任何类型的,如果某个运算数不是原始的布尔类型,逻辑与AND运算不一定返回布尔值:
- 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
- 如果两个运算数都是对象,返回第二个对象。
- 如果某个运算数是 null,返回 null。
- 如果某个运算数是 NaN,返回 NaN。
- 如果某个运算数是 undefined,发生错误。
6.3 OR 逻辑或
逻辑或OR运算符,进行运算时需要两个参数,只要当两个参数中其中一个为true时,逻辑与返回true。逻辑或OR运输符用双竖线(||)表示。
代码示例:
var x=true,y=false; console.log(x||y); //true
注意:逻辑或 OR 与逻辑与 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:
- 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
- 如果两个运算数都是对象,返回第一个对象。
- 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
- 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
- 如果某个运算数是 undefined,发生错误。