运算符
赋值运算符
和c语言一样
=
+=
/=
-=
%=
算数运算符
- 加法运算符 (+):用于将两个数相加。
- 减法运算符 (-):用于从一个数中减去另一个数。
- 乘法运算符 (*):用于将两个数相乘。
- 除法运算符 (/):用于将一个数除以另一个数。
- 取余运算符 (%):返回除法的余数。
- 幂运算符 (**):用于计算一个数的幂。
- 自增运算符 (++):将变量的值增加1。
- 自减运算符 (--):将变量的值减少1。
- 一元负号运算符 (-):将一个正数变成负数,或将一个负数变成正数。
- 一元正号运算符 (+):尝试将一个值转换为数字。如果无法转换,则返回NaN(Not a Number)。
// 加法运算符 (+)
console.log("加法: 5 + 3 =", 5 + 3);
// 减法运算符 (-)
console.log("减法: 10 - 4 =", 10 - 4);
// 乘法运算符 (*)
console.log("乘法: 6 * 2 =", 6 * 2);
// 除法运算符 (/)
console.log("除法: 15 / 3 =", 15 / 3);
// 取余运算符 (%)
console.log("取余: 17 % 5 =", 17 % 5);
// 幂运算符 (**)
console.log("幂运算: 2 ** 3 =", 2 ** 3);
// 自增运算符 (++)
let a = 5;
console.log("自增前:", a);
a++;
console.log("自增后:", a);
// 自减运算符 (--)
let b = 8;
console.log("自减前:", b);
b--;
console.log("自减后:", b);
// 一元负号运算符 (-)
console.log("一元负号: -10 =", -10);
// 一元正号运算符 (+)
console.log("一元正号: +'42' =", +'42'); // 将字符串转换为数字
逻辑运算符
- 逻辑与 (&&):
- 只有当所有操作数都为true时,才返回true。
- 如果有任何一个操作数为false,则返回false。
- 在短路评估中,如果第一个操作数为false,则不会评估第二个操作数。
- 逻辑或 (||):
- 如果任何一个操作数为true,则返回true。
- 只有当所有操作数都为false时,才返回false。
- 在短路评估中,如果第一个操作数为true,则不会评估第二个操作数。
- 逻辑非 (!):
- 将true变为false,将false变为true。
- 短路评估:
- 对于 &&,如果第一个操作数为false,则直接返回第一个操作数,不再评估第二个操作数。
- 对于 ||,如果第一个操作数为true,则直接返回第一个操作数,不再评估第二个操作数。
- 空值合并运算符 (??):
- 当左侧的操作数为null或undefined时,返回右侧的操作数。
- 这对于提供默认值很有用。
- 可选链运算符 (?.):
- 允许您在不确定对象是否存在的情况下安全地访问嵌套属性。
- 如果链中的任何部分为null或undefined,表达式会短路并返回undefined,而不是抛出错误。
// 逻辑与 (&&)
console.log("true && true =", true && true);
console.log("true && false =", true && false);
console.log("false && true =", false && true);
console.log("false && false =", false && false);
// 逻辑或 (||)
console.log("true || true =", true || true);
console.log("true || false =", true || false);
console.log("false || true =", false || true);
console.log("false || false =", false || false);
// 逻辑非 (!)
console.log("!true =", !true);
console.log("!false =", !false);
// 短路评估
console.log("true && 'Hello' =", true && 'Hello');
console.log("false && 'Hello' =", false && 'Hello');
console.log("true || 'Hello' =", true || 'Hello');
console.log("false || 'Hello' =", false || 'Hello');
// 空值合并运算符 (??)
let a = null;
let b = "default value";
console.log("null ?? 'default value' =", a ?? b);
// 可选链运算符 (?.)
let obj = { nested: { value: 42 } };
console.log("obj?.nested?.value =", obj?.nested?.value);
console.log("obj?.nonexistent?.value =", obj?.nonexistent?.value);
比较运算符
这段代码展示了JavaScript中常用的比较运算符。让我为您解释每个运算符的作用:
- 等于 (
==):- 比较两个值是否相等,但会进行类型转换。
- 例如,
5 == '5'返回true,因为字符串 '5' 会被转换为数字 5。
- 严格等于 (
===):- 比较两个值是否完全相等,包括类型。
- 不进行类型转换,所以
5 === '5'返回false。
- 不等于 (
!=):- 比较两个值是否不相等,会进行类型转换。
- 严格不等于 (
!==):- 比较两个值是否不完全相等,包括类型。
- 不进行类型转换。
- 大于 (>)、小于 (<)、大于等于 (>=)、小于等于 (<=):
- 用于比较数值的大小关系。
特殊比较情况:
null和undefined在使用==时被认为是相等的,但使用===时不相等。NaN不等于任何值,包括它自己。要检查一个值是否为NaN,可以使用isNaN()函数。
对象比较:
- 当比较对象时,JavaScript 比较的是对象的引用,而不是内容。
- 即使两个对象有相同的属性和值,如果它们是分别创建的,它们也被认为是不相等的。
- 只有当两个变量引用同一个对象时,它们才被认为是相等的。
// 等于 (==)
console.log("5 == 5:", 5 == 5);
console.log("5 == '5':", 5 == '5');
// 严格等于 (===)
console.log("5 === 5:", 5 === 5);
console.log("5 === '5':", 5 === '5');
// 不等于 (!=)
console.log("5 != 6:", 5 != 6);
console.log("5 != '5':", 5 != '5');
// 严格不等于 (!==)
console.log("5 !== 6:", 5 !== 6);
console.log("5 !== '5':", 5 !== '5');
// 大于 (>)
console.log("10 > 5:", 10 > 5);
// 小于 (<)
console.log("5 < 10:", 5 < 10);
// 大于等于 (>=)
console.log("10 >= 10:", 10 >= 10);
console.log("11 >= 10:", 11 >= 10);
// 小于等于 (<=)
console.log("10 <= 10:", 10 <= 10);
console.log("9 <= 10:", 9 <= 10);
// 特殊比较
console.log("null == undefined:", null == undefined);
console.log("null === undefined:", null === undefined);
console.log("NaN == NaN:", NaN == NaN);
console.log("NaN === NaN:", NaN === NaN);
// 对象比较
let obj1 = {a: 1};
let obj2 = {a: 1};
let obj3 = obj1;
console.log("obj1 == obj2:", obj1 == obj2);
console.log("obj1 === obj2:", obj1 === obj2);
console.log("obj1 === obj3:", obj1 === obj3);