JS-运算符

本文全面解析JavaScript中的各类运算符,包括数学运算符如加法、减法、乘法、除法、取模;关系运算符如大于、小于、等于;赋值运算符如简单赋值、复合赋值;自增自减运算符;逻辑运算符如逻辑与、逻辑或、逻辑非;以及逗号运算符和条件运算符。深入讨论了各种运算符的特点、使用场景和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数学运算符

+ - * / %

  • 算术运算符的优先级和结合性
    • * / % 优先级要高于 + -
    • 无论是+ - * / %都是左结合性(从左至右计算)
let result = 1 + 2 * 5;
console.log(result);    // 11
加法运算
  • 任何非数值类型的数据在参与加法运算之前, 都会被自动的转换成数值类型之后, 再参与运算
  • 任何数据和NaN进行运算, 结果都是NaN
  • 任何数据和字符串相加, 都会被先转换成字符串之后再运算
let res = 1 + true; 	// let res = 1 + 1;
let res = 1 + null; 	// let res = 1 + 0;

let res = 1 + NaN;		// NaN

let res = 1 + "123"; // let res = "1" + "123";  字符串相加的本质就是字符串拼接 "1123"
减法运算
  • 任何非数值类型的数据在参与加法运算之前, 都会被自动的转换成数值类型之后, 再参与运算
  • 任何数据和NaN进行运算, 结果都是NaN
  • 任何数据和字符串相减, 都会先把字符串转换成数值类型之后再运算
let res = 1 - true; // let res = 1 - 1;

let res = 1 - NaN;

let res = 1 - "123";  // let res = 1 - 123;   -122
乘法和除法运算

和减法运算一样

取模(取余)运算

格式: m%n = 余数

  • 如果m>n的, 那么就正常取余
  • 如果m<n的, 那么结果就是m
  • 如果n是0, 那么结果就是NaN
  • 取余运算结果的正负性, 取决于m而不是n
let res = 10 % 3;	// 1
let res = 3 % 10;	// 3
let res = 3 % 0;	// NaN
let res = 10 % -3; // 1
let res = -10 % 3;   // -1

关系运算符

> < >= <= == != === !==

关系运算符的返回值

只有两个, 要么是true, 要么是false
如果关系成立, 就返回true
如果关系不成立, 就返回false

关系运算符的注意点
  • 对于非数值类型的数据, 会先转换成数值类型, 再进行判断
  • 对于关系运算符来说, 任何数据和NaN进行比较, 返回值都是false
  • 如果参与比较的都是字符串类型, 那么不会转换成数值类型再比较, 而是直接比较字符对应的Unicode编码

Unicode编码查询

特殊比较的结果
let res = null == 0; // false
let res = undefined == 0; // false
let res = null == undefined;  // true
let res = NaN == NaN; // false
isNaN

如果想判断某一个数据是否是NaN那么可以通过isNaN来进行判断

let num = NaN;
let res = isNaN(num);
console.log(res);
=== !== 和 == !=
=== !==

会同时判断取值和数据类型

== !=

只会判断取值

// == 只会判断取值是否相等, 不会判断数据类型是否相等
let res = 123 == "123"; // let res = 123 == 123; true

// === 不仅会判断取值是否相等, 并且还会判断数据类型是否相等 
// 只有取值和数据类型都相等, 才会返回true
let res = 123 === "123"; // let res = 123 == 123; false

let res = 123 != "123"; // let res = 123 != 123; false
let res = 123 !== "123"; // let res = 123 != 123; false
关系运算符的结合性和优先级

关系运算符都是左结合性(从左至右的运算)
关系运算符中> < >= <= 的优先级高于 == != === !==


赋值运算符

赋值运算符就是将等号右边的值存储到等号左边的变量中

简单类型的赋值运算符

=

复杂类型的赋值运算符

+= -= *= /= %=

赋值运算符的优先级和结合性
  • 赋值运算符的优先级低于算数运算符
  • 赋值运算符的结合性是右结合性(从右至左的计算)
  • 赋值运算符的左边只能放变量, 不能放常量
// 由于算数运算符的优先级高于赋值运算符所以会先计算1 + 1, 然后再赋值给res
let res = 1 + 1;

// 由于赋值运算符的结合性是右结合性, 所以会先将3赋值给num2, 然后再将Num2中的值赋值给num1
let num1, num2;
num1 = num2 = 3;

自增自减运算符

自增自减运算符

自增运算符: ++
自减运算符: --

自增自减运算符的作用

自增运算符: 可以快速的对一个变量中保存的数据进行+1操作
自减运算符: 可以快速的对一个变量中保存的数据进行-1操作

自增和自减写在变量的前面和后面的区别

写在变量的后面, 表示变量先参与其它的运算, 然后再自增或者自减; (先用再加或减)
写在变量的前面, 表示变量先自增或者自减, 然后再参与其它的运算; (先加或减再用)

let num = 5;
// num = num + 1;
// num += 1; // num = num + 1;
// num++; // num = num + 1;
++num;
console.log(num);   // 6


let num = 5;
// num = num - 1;
// num -= 1;
// num--;
--num;
console.log(num);	// 4


let num = 1;
let res = num++ + 1; // let res = num + 1; num++;     	2
let res = ++num + 1;  // num++; let res = num + 1;		3
注意
  • 自增自减运算符只能出现在变量的前面或者后面, 不能出现在常量或者表达式的前面或者后面
  • 自增自减运算符最好单独出现
let num = 1
++num;
num--;
--666; 错误
666++;
(1 + 1)++; 
--(1 + 1);


let a, b;
a = 10;
b = 5;
// 不推荐的写法
// let res = a++ + b; //  let res = a + b; a++;
let res = a + b;
a++;
console.log(res);
console.log(a);

逻辑元素符

逻辑与 &&

格式: 条件表达式A && 条件表达式B
返回值: true false
特点: 一假则假

let res = true && true; // true;
let res = false && true; // false;
let res = true && false; // false;
逻辑或 ||

格式: 条件表达式A || 条件表达式B
返回值: true false
特点: 真则真

let res = true || true; // true
let res = false || true; // true
let res = true || false; // true
let res = false || false; // false
逻辑非 !

格式: !条件表达式
返回值: true false
特点: 真变假, 假变真

let res = !true; // false
let res = !false; // true
逻辑运算符的优先级和结合性

逻辑运算符的结合性是左结合性(从左至右的运算)
在逻辑运算中==&&的优先级高于||==

逻辑运算符的注意点
  • 在逻辑运算中如果不是布尔类型, 那么会先转换成布尔类型, 再参与其它的运算

  • 在逻辑运算中, 如果参与运算的不是布尔类型, 返回值有一个特点
    格式: 条件A && 条件B
    如果条件A不成立, 那么就返回条件A
    如果条件A成立, 无论条件B是否成立, 都会返回条件B

  • 在逻辑运算中, 如果参与运算的不是布尔类型, 返回值有一个特点
    格式: 条件A || 条件B
    如果条件A成立, 那么就返回条件A
    如果条件A不成立, 无论条件B是否成立, 都会返回条件B

短路现象
  • 在逻辑与运算中,有一个逻辑短路现象
    格式: 条件A && 条件B
    由于逻辑运算的规则是一假则假, 所以只要条件A是假, 那么条件B就不会运算
  • 在逻辑或运算中,有一个逻辑短路现象
    格式: 条件A || 条件B
    由于逻辑运算的规则是一真则真, 所以只要条件A是真, 那么条件B就不会运算
// && 如果条件A不成立, 那么就返回条件A
let res = 0 && 123;
let res = null && 123;
// &&如果条件A成立, 无论条件B是否成立, 都会返回条件B
let res = 1 && 123;
let res = 1 && null;

// ||如果条件A成立, 那么就返回条件A
let res = 666 || 0;
// ||如果条件A不成立, 无论条件B是否成立, 都会返回条件B
let res = 0 || 123;
let res = 0 || null;

逗号运算符

在JavaScript中逗号运算符一般用于简化代码

逗号运算符优先级和结合性

逗号运算符的结合性是左结合性(从左至右的运算)
逗号运算符的优先级是所有运算符中最低的

逗号运算符也是一个运算符, 所以也有运算符结果

逗号运算符的运算符结果就是最后一个表达式的结果
表达式1, 表达式2, 表达式3, …;

// 利用逗号运算符同时定义多个变量
let a, b;
// 利用逗号运算符同时给多个变量赋值
a = 10, b = 5;


let res = ((1 + 1), (2 + 2), (3 + 3));
console.log(res);		// 6

条件运算符(三元运算符)

三元运算符又称之为条件运算符

格式

条件表达式 ? 结果A : 结果B;
在三元运算符中当条件为的时候, 就会返回结果A
在三元运算符中当条件为的时候, 就会返回结果B

三元运算符注意点

在三元运算符中==?:不能单独出现==, 要么一起出现, 要么一起不出

let res = (10 > 5) ? 10 : 5;  // 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值