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中的常见位运算符:

  1. 按位与(&):
    • 将两个操作数的每个位进行逻辑与操作。例如,(5 & 3) 的结果是 1,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑与结果是 001。
  2. 按位或(|):
    • 将两个操作数的每个位进行逻辑或操作。例如,(5 | 3) 的结果是 7,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑或结果是 111。
  3. 按位异或(^):
    • 将两个操作数的每个位进行逻辑异或操作。例如,(5 ^ 3) 的结果是 6,因为 5 的二进制表示是 101,3 的二进制表示是 011,所以它们的逻辑异或结果是 110。
  4. 按位非(~):
    • 将操作数的每个位进行逻辑非操作。例如,(~5) 的结果是 -6,因为 5 的二进制表示是 101,将其按位取反得到 010,然后将其解释为有符号整数,即 -6。
  5. 左移(<<):
    • 将第一个操作数的二进制表示向左移动第二个操作数指定的位数。例如,(5 << 2) 的结果是 20,因为 5 的二进制表示是 101,将其向左移动两位得到 10100,即 20。
  6. 右移(>>):
    • 将第一个操作数的二进制表示向右移动第二个操作数指定的位数,舍弃最低位。例如,(5 >> 2) 的结果是 1,因为 5 的二进制表示是 101,将其向右移动两位得到 1。
  7. 无符号右移(>>>):
    • 将第一个操作数的二进制表示向右移动第二个操作数指定的位数,舍弃最低位,并用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>&#9760;</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代码时,了解运算符的优先级有助于正确地组织表达式。如果不确定运算符的优先级,可以使用括号 ( ) 明确地指定执行顺序。

posted @ 2023-07-26 20:06  FL不凡  阅读(5)  评论(0编辑  收藏  举报