JavaScript运算符
运算符
JavaScript有多种运算符,包括以下几类:
算术运算符
+
加号:用于相加- String相加会拼串
- 任何值和字符串相加时,都会先转换为字符串再拼接
- 除了
+
会将值转换为字符串,其余运算符都会将值转换为number
let a= 1234;
let res = a +1;//不会对a产生影响
res = true +1;//2,先将true转成1在计算
res = true + false;//1,将两个布尔值都转换在计算
res = 2 + NaN;//NaN,任何数与NaN运算结果都是NaN
res = "只因你" + "太美";//只因你太美,字符串拼接
res = true + "太美";//true太美
console.log(res)
//可以将任意数据类型+""转换为string
let c = 1 + "";
console.log("c = " + c)
let d = 1 + 2 + "3";//"33"
d = "1" + 2 + 3;//"123"
console.log(d);
-
减号:用于相减*
乘号:用于相乘/
除号:用于相除%
取模运算符:返回两个数值相除的余数
//减法
let e = 100 -"1";//99
e = 100 - undefined;//NaN
e = 100 * 2;//200
e = 100 * undefined;//NaN
e = 100 / 2;//50
// e = 100 / undefined;//NaN
//利用任何值做-、*、/运算时都会自动转换为number
e = "114514" - 0;
console.log(e);
console.log(typeof e);
赋值运算符
=
等于号:将右操作数的值赋给左操作数+=
加等于:等同于 a = a + b-=
减等于:等同于 a = a - b*=
乘等于:等同于 a = a * b/=
除等于:等同于 a = a / b%=
取模等于:等同于 a = a % b
比较运算符
-
==
相等:用于比较两个值是否相等,注意与赋值运算符的区别 -
!=
不等于:用于比较两个值是否不相等 -
<
小于:返回一个布尔值表示左操作数是否小于右操作数 -
>
大于:返回一个布尔值表示左操作数是否大于右操作数 -
<=
小于等于:返回一个布尔值表示左操作数是否小于或等于右操作数 -
>=
大于等于:返回一个布尔值表示左操作数是否大于或等于右操作数 -
对于非数值情况,先将数值转换为number在比较
-
任何值与NaN做比较,结果都是false
-
如果符号两边都是字符串是,不会将其转换为数字比较,而是比较两个值的Unicode编码,且比较字符编码是一位一位比较(可以用来来对英文排序)
逻辑运算符
-
&&
逻辑与:用于两个操作数都为true
时返回true
- 只要有一个false就返回false
- 如果第一个值是false,就不会向下看下一个条件
- 对于不是布尔值进行运算,会先将该值转化为布尔值,再运算
- 如果第一个值为true,就返回第二个值
-
||
逻辑或:用于两个操作数有一个为true
时就返回true
- 只要有一个true就返回true
- 如果第一个值是true,就不会向下看下一个条件
- 对于不是布尔值进行运算,会先将该值转化为布尔值,再运算
- 如果第一个值为true,就返回第一个值
-
!
逻辑非:用于取反操作数的值- 如果是布尔值,直接取反
- 如果不是布尔值,先转换为布尔值,再取反
- 可以让任意值取两次反,将该值转换为boolean
//逻辑运算符
//取反!
let a = true;
// - 如果是布尔值,直接取反
a = !a;//false
// 如果不是布尔值,先转换为布尔值,再取反
a = !0;//true
//可以让任意值取两次反,将该值转换为boolean
a = !!undefined;//false
console.log(a);
//逻辑与&&
let res1 = false && true;
res1 = 2 && 1;//1
res1 = 0 && 1;//0
res1 = 0 && NaN;//0
res1 = NaN && 0;//NaN
console.log(res1);
//逻辑或||
let res2 = false || true;
res2 = 2 || 1;//2
res2 = 1 || 2;//1
res2 = 0 || 1;//1
res2 = 0 || NaN;//NaN
res2 = NaN || 0;//0
console.log(res2);
位运算符
- 位运算符用于对数值的二进制位进行操作。
JavaScript位运算符用于在二进制级别上操作数字。以下是JavaScript中的常见位运算符:
- 按位与(&):
- 将两个操作数的每个位进行逻辑与操作。例如,(5 & 3) 的结果是 1,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑与结果是 001。
- 按位或(|):
- 将两个操作数的每个位进行逻辑或操作。例如,(5 | 3) 的结果是 7,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑或结果是 111。
- 按位异或(^):
- 将两个操作数的每个位进行逻辑异或操作。例如,(5 ^ 3) 的结果是 6,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑异或结果是 110。
- 按位非(~):
- 将操作数的每个位进行逻辑非操作。例如,(~5) 的结果是 -6,因为 5 的二进制表示是 101,将其按位取反得到 010,然后将其解释为有符号整数,即 -6。
- 左移(<<):
- 将第一个操作数的二进制表示向左移动第二个操作数指定的位数。例如,(5 << 2) 的结果是 20,因为 5 的二进制表示是 101,将其向左移动两位得到 10100,即 20。
- 右移(>>):
- 将第一个操作数的二进制表示向右移动第二个操作数指定的位数,舍弃最低位。例如,(5 >> 2) 的结果是 1,因为 5 的二进制表示是 101,将其向右移动两位得到 1。
- 无符号右移(>>>):
- 将第一个操作数的二进制表示向右移动第二个操作数指定的位数,舍弃最低位,并用0填充左侧空出的位。例如,(-5 >>> 2) 的结果是 1073741822,因为 -5 的二进制表示是 11111111111111111111111111111011,将其向右移动两位得到 00111111111111111111111111111110,即 1073741822。
- 作用:
- 掩码操作,提取或设置特定位的值
- 位标志,可以将多个位标志合并为一个值
- 位压缩,将多个布尔值压缩为一个整数,从而节省内存
- 数据加密
- 性能优化,位运算符通常比其他算术运算符和逻辑运算符更快
其他运算符
-
一元运算符
+
正号;-
减号- 可以使用
+
来使其他类型转换为number
- 可以使用
typeof
用于返回操作数的数据类型,会将该值的数据类型一字符串的形式返回
-
自增自减(语法同java)
++
--
// ++
let n1 = 0;
console.log(n1++);//0
console.log(++n1);//2
//--
let n2 = 0;
console.log(n2--);//-1
console.log(--n2);//-2
- 三元运算符
- 条件表达式?语句1:语句2
- 如果条件表达式为true就执行语句1,并返回结果;否则执行语句2,并返回结果
let a = 1;
let b = 2;
let res;
a > b ? res = a : res = b; //如果a>b就返回a,否则返回b
console.log(res);
- void(表达式)
- 运算原理:执行表达式,但是不返回结果
<!--void(表达式)不返回任何结果
javascript:不能省略,作用是告诉浏览器后面是一段js代码
-->
<a href="javascript:void(0)" onclick="window.alert('test code')">
既保留住超链接的样式,同时用户点击超链接时执行js代码,页面不跳转
</a>
-
,
可以用来分割多个语句- 可以声明多个变量然后赋值
-
unicode码:
- 在字符串中:
\u四位编码
(16进制) - 在网页中:
&#编码
(此处编码需要是上面的编码转换为十进制的)
- 在字符串中:
<h1>☠</h1>
<script type="text/javascript">
//unicode编码
console.log("\u2620");
</script>
运算符优先级
在JavaScript中,运算符的优先级决定了表达式中运算符的执行顺序。较高优先级的运算符会在较低优先级的运算符之前执行。以下是一些主要的JavaScript运算符及其优先级(从高到低):
1. 括号:( )
2. 成员访问:.
和 []
3. 函数调用:()
4. 逻辑非:!
5. 乘法、除法、取模:*
、/
、%
6. 加法、减法:+、-
7. 关系运算符:<、>、<=、>=
8. 相等运算符:==
、!=
、===
、!==
9. 逻辑与:&&
10. 逻辑或:||
11. 条件运算符:? :
12. 赋值运算符:=、+=、-=、*=
、/=
、%=
等
在编写JavaScript代码时,了解运算符的优先级有助于正确地组织表达式。如果不确定运算符的优先级,可以使用括号 ( ) 明确地指定执行顺序。