运算符

123 阅读4分钟

运算符

常用术语

运算元

运算元 —— 运算符应用的对象。比如说乘法运算 5 * 2 ,有两个运算元:左运算元 5 和右运算元 2 。有时候人们也称其为“参数”而不是“运算元”。

_元运算符

如果一个运算符对应的只有一个运算元,那么它是一元运算符
如果一个运算符拥有两个运算元,那么它是 二元运算符

数学运算符

六种基本运算

image.png

5.%
求余
6.**
求幂
a ** b 是 a 乘以自身 b 次

注意

如果运算元不是数字,加号 + 则会将其转化为数字。

alert( +true ); // 1
alert( +"" ); // 0

它的效果和 Number(...) 相同,但是更加简短。

赋值运算符

image.png 3.自增++减--
当运算符置于变量后,被称为“后置形式”: counter++ 。先赋值再加
当运算符置于变量前,被称为“前置形式”: ++counter 。先加在赋值

比较运算符

基本比较

image.png

image.png

image.png

字符串比较

  1. 首先比较两个字符串的首位字符大小。
  2. 如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束。
  3. 否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较。
  4. 重复上述步骤进行比较,直到比较完成某字符串的所有字符为止。
  5. 如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的 字符串更大

不同类型比较

当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。
对于布尔类型值, true 会被转化为 1 、 false 转化为 0 。
注:
若直接比较两个值,其结果是相等的。
若把两个值转为布尔值,它们可能得出完全相反的结果,即一个是 true ,一个是false 。

let a = 0;
alert( Boolean(a) ); // false
let b = "0";
alert( Boolean(b) ); // true
alert(a == b); // true!

注意

当使用数学式或其他比较方法 < > <= >= 时:
null/undefined 会被转化为数字: null 被转化为 0
undefined 被转化为 NaN
undefined 不应该被与其他值进行比较

在非严格相等 == 下, null 和 undefined 相等且各自不等于任何其他的值。
在使用 > 或 < 进行比较时,需要注意变量可能为 null/undefined 的情况。
比较好的方法是单独检查变量是否等于 null/undefined 。

逻辑运算符

1.&&(与)

image.png result = value1 && value2 && value3;
与运算返回第一个假值,如果没有假值就返回最后一个值。

// 如果第一个操作数是真值,
// 与运算返回第二个操作数:
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 如果第一个操作数是假值,
// 与运算将直接返回它。第二个操作数会被忽略
alert( null && 5 ); // null
alert( 0 && "no matter what" ); // 0

特殊用法

短路用法

var y
console.log(y.toString())
//报错

var y
console.log(y && y.toString())
/*y为假,则不会执行y.toString() 输出umdifined;y为真,转成字符串*/

2.||(或)

image.png result = value1 || value2 || value3;
返回第一个真值,如果不存在真值,就返回该链的最后一个值。
返回的值是操作数的初始形式,不会做布尔转换。

alert( 1 || 0 ); // 1(1 是真值)
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(都是假值,返回最后一个值)

特殊用法

1. 获取变量列表或者表达式中的第一个真值。
let firstName = "";
let lastName = "";
let nickName = "SuperCoder";
alert( firstName || lastName || nickName || "Anonymous"); // SuperCoder

如果所有变量的值都为假,结果就是 "Anonymous" 。

2. 短路用法

|| 对其参数进行处理,直到达到第一个真值,然后立即返回该值,而无需处理其他参数。
例如:

true || alert("not printed");
false || alert("printed");

只会打印第二条信息

只在左侧的条件为假时才执行命令
例如:

var z=""
document.write(z || "这个家伙很懒,什么也没留下")

var z="我是"
document.write(z || "这个家伙很懒,什么也没留下")

3.!(非)

image.png

特殊用法

!!value 转换为布尔值
例如:

alert( !!"non-empty string" ); // true
alert( !!null ); // false

三目运算符

image.png