JS-运算符(操作符)
运算符也叫操作符,通过运算符可以对一个或者多个值进行运算;
比如说,typeof
就是一个运算符,获得一个值的类型,并将该值的类型以字符串的形式返回;
-
算数运算符
+:加法运算符,对符号两侧的两个值进行加法运算,并将结果返回;
-
当对非
Number
类型的值进行运算时,会将这些值转换为Number
,然后再进行相加运算; -
任何值和
NaN
进行运算都是NaN
; -
对两个字符串进行加法运算,则会做拼串,会将两个字符串拼接为一个字符串并返回;
-
任何值和字符换进行加法运算,都会首先转换为字符串,然后再进行拼串;可以利用将任意数据类型加上一个空字符串"",即可将其转换为
String
类型,这是一种隐式的类型转换,由浏览器自动完成;实际上也是调用String()
函数; -
也可以运用在输出中,使得输出结果更加可观,例如:
console.log("c=" + c);
-
JS在进行运算时,在无小括号的情况下,同级运算符下,运算顺序是由左向右进行运算的;
-:减法运算符,对两个值进行减法运算,并将结果返回;
1. 除了加法运算中,字符串都是转换为
Number
类型进行运算的;* :乘法运算,对两个值进行乘法运算,并将结果返回;
- 任何值做 减 乘 除 运算都会自动转换为
Number
类型,可以利用这个特性进行Number
类型转换;即 减0 乘1 除1 将其转换为Number
类型;原理和Number()
函数一样,使用起来更加简单;
/ :除法运算,对两个值进行除法运算,并将结果返回;
% :取模运算(取余数运算)
-
-
一元运算符
一元运算符:只需要一个操作数,即可以是变量本身;
+:正号
-
不会对数值产生任何影响;
-
对于非
Number
类型的值,首先转换为数值在进行运算; -
可以利用这个特性,
+其他数据类型
将任意数据类型转换为Number
类型,其原理和Number()
函数一样;
-:负号
-
可以对数字进行符号取反;
-
对于非
Number
类型的值,首先转换为数值在进行运算;
-
-
自增和自减运算
自增运算符:++
-
通过自增可以使变量在自身的基础上增加1;
-
变量自增以后,原变量的值会立即自增1;
-
自增分为两种:后++(a++)和前++(++a),两种方式都会使得原变量的值自增1;但是不同的是 a++ 和 ++a 的值不同:
a++ 的值等于原变量的值,即自增前的值;
++a 的值等于原变量自增后的值,即自增后的值;
<script> //自增练习 var n1=10; var n=n1++; console.log(n1);//返回11 console.log(n);//返回10 var n=++n1; console.log(n1);//返回12 console.log(n);//返回12 </script>
自减运算符:--
-
通过自减可以使变量在自身的基础上减1;
-
自减分为两种:后–(a–) 和 前–(--a),两种方式都会使得原变量的值自减1;不同的是a–和--a的值不同:
a-- 的值是等于原变量的值,即自减前的值;
--a 的值是原变量自减后的值,即自减后的值;
<script> //自减练习 var n2=20; var n=n2--; console.log(n2);//返回19 console.log(n);//返回20 var n=--n2; console.log(n2);//返回18 console.log(n);//返回18 </script>
-
-
逻辑运算符
JS中提供了三种逻辑运算符:与或非;
(1)布尔值的与或非运算
— ! 非运算符
-
可以用来对一个值进行非运算;
-
非运算对一个布尔值进行取反操作;
true
—>false
false
—>true
-
对一个值进行两次非运算,还是原值;
-
如果对非布尔值进行运算,则会将其转换为布尔值,然后再取反;所以可以利用该特点,将其他数据类型转换为布尔类型,即对任意数据类型取两次非,将其转换为布尔类型,其原理和
Boolean()
函数一样;
— && 与运算符
-
可以对符号两侧的值进行与运算并返回结果;
-
布尔值运算规则:
两个值中有一个
false
,就返回false
;只有两个值都为
true
,就返回true
; -
JS中的与属于“短路与”,如果第一个值为
false
,则不会检查第二个值;
— || 或运算符
-
可以对符号两侧的值进行或运算并返回结果;
-
布尔值运算规则:
只要有一个
true
,就返回true
;只有两个值都为
false
,就返回false
; -
JS中的或属于“短路或”,如果第一个值为
true
,则不会检查第二个值;
(2)非布尔值的与或运算
-
对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值;
-
对于与运算,如果两个值的布尔值都为
true
,则返回后边数据的原值;如果其中一个值的布尔值为false
,则返回布尔值为false
的原数据;如果两个值的布尔值都为false
,则返回布尔值为false
的前边的原数据;简单概括:如果第一个值的布尔值为
true
,则必然返回第二个值;如果第一个值的布尔值为
false
,则直接返回第一个值; -
对于或运算:
如果第一个值的布尔值为
true
,则直接返回第一个值;如果第一个值的布尔值为
false
,则直接返回第二个值;
-
-
赋值运算符
=:可以将符号右侧的值赋值为符号左侧的变量;
+=:即
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
;(1)数值情况下:
> :大于号,判断左侧的值是否大于右侧的值;关系成立返回
true
;>= :大于等于号,判断左侧的值是否大于或者等于右侧的值;关系成立返回
true
;< :小于号,判断左侧的值是否小于右侧的值;关系成立返回
true
;<= :小于等于号,判断左侧的值是否小于或者等于右侧的值;关系成立返回
true
;(2)非数值情况下:
—对于非数值进行关系运算时,会将非数值类型的数据转换为数值,在进行比较;
—任何值和
NaN
做比较都是false
,即数值和非数值型字符串进行比较时,是false
;—特殊情况,如果符号两侧的值都是字符串,不会将其转换为数字比较,而是比较字符串中的 Unicode编码;比较字符编码时,是逐位比较,如果两位大小一样,则按照从左向右依次比较下一位;可以借用这个特性对英文进行排序;比较中文无意义;
—如果比较两个字符串型的数字,可能得到不可预期的结果:例如:
“11” < “5” 返回
true
:首先比较第一个,“1"的Unicode编码小于"5"的Unicode编码,因此"11” < "5"成立;—注意在比较两个字符串型的数字时,一定要进行转型:“11” < +“5” 返回
false
;+"5"转换为数值型,因此进行比较时,会将字符串转换为数值,在进行比较; -
Unicode编码
(1)如何在JS中输出Unicode编码对应的字符,语法:
\u四位编码
;使用转义字符\u
+四位Unicode编码;例如:
console.log("\u2620");
(2)如何在网页html中使用Unicode编码:
&#十进制编码;
例如:
<h1>☠</h1>
-
相等和全等运算符
相等运算符:比较符号两侧的值是否相等,如果相等返回
true
,否则返回false
;使用 == 进行相等运算比较;—进行相等运算比较时,如果符号两侧的值类型不同,则自动转换相同类型进行比较;
—
Undefined
衍生自Null
,所以这两个类型的数据做相等运算,会返回true
;—
NaN
不和任何值相等,包括它本身;可以通过isNaN()
函数判断一个值是否是NaN
,如果该值为NaN
则返回true
;不等运算符:判断两个值是否不相等,如果不相等则返回
true
,否则返回false
;使用 != 进行不等运算比较;—进行不等运算比较时,如果符号两侧的值类型不同,则自动转换相同类型进行比较;如果转换后,两个数据相等,则返回
false
;全等运算符:判断两个值是否全等,与相等运算符类似,不同的是不会做自动类型转换;如果两个值的类型不同,直接返回
false
;全等运算符===;不全等运算符:判断两个值是否不全等,和不等运算类似,不同的是不会进行自动类型转换;如果两个值的类型不同,直接返回
true
;不全等运算符!==; -
条件运算符
条件运算符也叫三元运算符;
—语法:
条件表达式?语句1:语句2;
—条件运算符执行过程:首先对条件表达式进行求值;如果该值为
true
,则执行语句1,并返回执行结果;如果该值为false
,则执行语句2,并返回执行结果;—如果条件表达式的结果是一个非布尔值,则会将其转换为布尔值然后在进行运算;
-
运算符优先级
—先乘除在加减;
—与运算优先级高于或运算优先级;
—在JS中有一个符号优先级的表,在表中位置越靠上,优先级越高,越优先计算;如果优先级相同,则从左向右进行计算;
—但是这个表并不需要记,如果遇到优先级不清楚的,可以使用小括号()改变优先级进行优先计算;
—使用逗号,可以分割多个语句,例如:一般在声明多个变量并进行赋值时使用;
var a=1,b=3,c=2;