JavaScript运算符补完

79 阅读4分钟

运算符

赋值运算符

和c语言一样 = += /= -= %=

算数运算符
  1. 加法运算符 (+):用于将两个数相加。
  2. 减法运算符 (-):用于从一个数中减去另一个数。
  3. 乘法运算符 (*):用于将两个数相乘。
  4. 除法运算符 (/):用于将一个数除以另一个数。
  5. 取余运算符 (%):返回除法的余数。
  6. 幂运算符 (**):用于计算一个数的幂。
  7. 自增运算符 (++):将变量的值增加1。
  8. 自减运算符 (--):将变量的值减少1。
  9. 一元负号运算符 (-):将一个正数变成负数,或将一个负数变成正数。
  10. 一元正号运算符 (+):尝试将一个值转换为数字。如果无法转换,则返回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'); // 将字符串转换为数字
逻辑运算符
  1. 逻辑与 (&&):
    • 只有当所有操作数都为true时,才返回true。
    • 如果有任何一个操作数为false,则返回false。
    • 在短路评估中,如果第一个操作数为false,则不会评估第二个操作数。
  2. 逻辑或 (||):
    • 如果任何一个操作数为true,则返回true。
    • 只有当所有操作数都为false时,才返回false。
    • 在短路评估中,如果第一个操作数为true,则不会评估第二个操作数。
  3. 逻辑非 (!):
    • 将true变为false,将false变为true。
  4. 短路评估:
    • 对于 &&,如果第一个操作数为false,则直接返回第一个操作数,不再评估第二个操作数。
    • 对于 ||,如果第一个操作数为true,则直接返回第一个操作数,不再评估第二个操作数。
  5. 空值合并运算符 (??):
    • 当左侧的操作数为null或undefined时,返回右侧的操作数。
    • 这对于提供默认值很有用。
  6. 可选链运算符 (?.):
    • 允许您在不确定对象是否存在的情况下安全地访问嵌套属性。
    • 如果链中的任何部分为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中常用的比较运算符。让我为您解释每个运算符的作用:

  1. 等于 (==):
    • 比较两个值是否相等,但会进行类型转换。
    • 例如,5 == '5' 返回 true,因为字符串 '5' 会被转换为数字 5。
  2. 严格等于 (===):
    • 比较两个值是否完全相等,包括类型。
    • 不进行类型转换,所以 5 === '5' 返回 false
  3. 不等于 (!=):
    • 比较两个值是否不相等,会进行类型转换。
  4. 严格不等于 (!==):
    • 比较两个值是否不完全相等,包括类型。
    • 不进行类型转换。
  5. 大于 (>)、小于 (<)、大于等于 (>=)、小于等于 (<=):
    • 用于比较数值的大小关系。

特殊比较情况:

  • nullundefined 在使用 == 时被认为是相等的,但使用 === 时不相等。
  • 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);