运算符
运算符又称为操作符,通过运算符可以对一个或多个值进行运算,并获取运算结果。
比如:typeof
就是一个运算符,可以获取一个字面量的类型,它会将字面量的类型以字符串的形式返回。
算术运算符
+
加法运算-
减法运算*
乘法运算/
除法运算%
取模运算
- 对非Number类型的值进行运算时,会将其先转换为Number类型再进行运算。
- 任何值与
NaN
进行运算结果都为NaN
。 - 如果对两个字符串进行加法操作,会将两个字符串进行拼接。
- 任何值与字符串作加法运算,都会将其先转换为String再进行拼串。
- 可以利用这一特点,将任意类型的数据类型转换为String,只需要为任意的数据
+
一个""
空串,即可将其转换为String,这是一种隐式的类型转换,由浏览器自动完成,实际上也是调用了String()
函数。
- 可以利用这一特点,将任意类型的数据类型转换为String,只需要为任意的数据
- 任何值与字符串作
-
、*
、/
运算,都会将其先转换为Number再进行运算。- 可以利用这一特点作隐式的类型转换,通过为一个值
- 0
、* 1
、/ 1
来将其转换为Number。
- 可以利用这一特点作隐式的类型转换,通过为一个值
result = 1 + 2 + "3"; //result为33
result = "1" + 2 + 3; //result为123
result = 2 * null; //result为0
result = 9 % 3; //9除以3余0,结果为0
result = 9 % 4; //9除以4余1,结果为1
一元运算符
+
正号
正号不会对数值产生任何影响。-
负号
负号可以对数值进行负号的取反。
- 对于非Number的值,它会将其先转换为Number,再进行运算。
可以对其他的数据类型使用+
正号运算,来将其转换为Number,原理和Number()
相同。
自增和自减
++
自增
通过自增可以使变量在自身的基础上增加1,并且原变量的值会立即改变。a++;
相当于a = a + 1;
- 表达式
a++
的值是自增前的值 - 表达式
++a
的值是自增后的值
- 表达式
--
自减
通过自减可以使变量在自身的基础上减去1,并且原变量的值会立即改变。a--;
相当于a = a - 1;
- 表达式
a--
的值是自减前的值 - 表达式
--a
的值是自减后的值
- 表达式
var a = 1;
a = a++;
console.log("a的值是" + a);
a的值是1
注意区分变量与表达式。
逻辑运算符
JS中提供了三种逻辑运算符,用来作逻辑判断。
Boolean的逻辑运算:
!
非运算
非运算就是对一个布尔值进行取反操作,true
变false
,false
变true
。- 如果对一个值进行两次非运算,它不会改变。
- 如果对一个非布尔值进行非运算,则会将其转换为布尔值再运算。
- 可以利用该特点,为任意数据类型作两次非运算,来将其转换为布尔值。
&&
与运算
可以对符号两侧的值进行与运算并返回结果。- 运算规则
- 只要有一个
false
则返回false
- 两个值都为
true
时才返回true
- 只要有一个
- 运算规则
JS中的与运算是“短路的与”,当第一个值为
false
时,便不会再考虑第二个值。
||
或运算
可以对符号两侧的值进行或运算并返回结果。- 运算规则
- 只要有一个
true
则返回true
- 两个值都为
false
时才返回false
- 只要有一个
- 运算规则
JS中的或运算是“短路的或”,当第一个值为
true
时,便不会再考虑第二个值。
非Boolean的逻辑运算:
对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再进行运算,并且返回原值。
- 与运算
- 如果第一个值为
true
,则返回第二个值。
例:var result = 5 && 6;
返回6
- 如果第一个值为
false
,则返回第一个值。
例:var result = NaN && 9;
返回NaN
- 如果第一个值为
- 或运算
- 如果第一个值为
true
,则返回第一个值。
例:var result = 2 || NaN;
返回2
- 如果第一个值为
false
,则返回第二个值。
例:var result = "" || "hello"
返回"hello"
- 如果第一个值为
赋值运算符
=
str = "I love you."
可以将符号右侧的值赋值给符号左侧的变量。
+=
a += 5;
等价于a = a + 5;
-=
a -= 5;
等价于a = a - 5;
*=
a *= 5;
等价于a = a * 5;
/=
a /= 5;
等价于a = a / 5;
%=
a -%= 5;
等价于a = a % 5;
关系运算符
通过关系运算符可以比较两个值之间的大小关系,如果关系成立则返回true
,如果关系不成立则返回false
。
自动转换类型
Number的关系运算:
>
大于
判断符号左侧的值是否大于右侧的值。
关系成立则返回true,反之则返回false。
>=
大于或等于
判断符号左侧的值是否大于或等于右侧的值。
关系成立则返回true,反之则返回false。
<
小于
判断符号左侧的值是否小于右侧的值。
关系成立则返回true,反之则返回false。
<=
小于或等于
判断符号左侧的值是否小于或等于右侧的值。
关系成立则返回true,反之则返回false。
==
等于
判断符号左侧的值是否等于右侧的值。
关系成立则返回true
,反之则返回false
。
!=
不等于
判断符号左侧的值是否不等于右侧的值。
关系成立则返回true
,反之则返回false
。
非Number的关系运算:
- 对于非数值类型的值进行关系运算时,会将其先转换为Number再进行计算。
- 如果符号两侧的值都是字符串时,不会将其转换为数字进行比较,而会从左至右按位分别比较字符的Unicode编码。
因此可以用来对英文进行排序,但是比较中文时无任何意义。
注意:在比较两个字符串型的数字时,一定要先手动转换类型。
- 任何值与
NaN
进行关系运算,都返回false
。
undefined
衍生自null
,因此这两个值作相等判断时返回true
。console.log(undefined == null);
结果为true
不自动转换类型
===
全等
判断符号两侧的值是否全等,不会自动做类型转换。
关系成立则返回true
,反之则返回false
。
!==
不全等
判断符号两侧的值是否不全等,不会自动做类型转换。
关系成立则返回true
,反之则返回false
。
注意:
NaN
不与任何值相等,包括它本身。
console.log(undefined === null);
结果为false
- 可以使用
isNaN()
函数来判断一个值是否为NaN
,若该值是NaN
则返回true
,反之则返回false
。
条件运算符
也叫三元运算符或者三目运算符。
- 语法:
条件表达式?语句1:语句2;
- 执行流程
首先对条件表达式
进行求值,如果该值为true
,则执行语句1
,并返回结果;如果该值为false
,则执行语句2
,并返回结果。
var a = 10, b = 20, c = 30;
/** 获取a、b、c中的最大值 **/
var max = a > b ? a : b; //将a和b中的最大值赋值给max
max = max > c ? max : c; //将max和c中的最大值赋值给max
max = a > b ? a > c ? a : b > c ? b : c;
逗号运算符
使用,
可以分割多个语句,一般可以在声明多个变量时使用,使用,
运算符同时声明多个变量。
var a, b, c;
var x = 10, y = 20, z = 30;
运算符的优先级
与数学中一样,JavaScript的运算符也有优先级。
运算符的优先级:
.
[]
new
()
++
--
!
~
+(单目)
-(单目)
typeof
void
delete
%
*
/
+(双目)
-(双目)
<<
>>
>>>
<
<=
>
>=
==
!==
===
&
^
|
&&
||
?:
=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
,
上表列出的优先级从上至下由高到低,同一行优先级相同。
如发现错误请联系我,谢谢你。
本文链接:http://ninefire.tk/JavaScript.basics/07.html