运算符
常用术语
运算元
运算元 —— 运算符应用的对象。比如说乘法运算 5 * 2 ,有两个运算元:左运算元 5 和右运算元 2 。有时候人们也称其为“参数”而不是“运算元”。
_元运算符
如果一个运算符对应的只有一个运算元,那么它是一元运算符
如果一个运算符拥有两个运算元,那么它是 二元运算符
数学运算符
六种基本运算
5.%
求余
6.**
求幂
a ** b 是 a 乘以自身 b 次
注意
如果运算元不是数字,加号 + 则会将其转化为数字。
alert( +true ); // 1
alert( +"" ); // 0
它的效果和 Number(...) 相同,但是更加简短。
赋值运算符
3.自增++减--
当运算符置于变量后,被称为“后置形式”: counter++ 。先赋值再加
当运算符置于变量前,被称为“前置形式”: ++counter 。先加在赋值
比较运算符
基本比较
字符串比较
- 首先比较两个字符串的首位字符大小。
- 如果一方字符较大(或较小),则该字符串大于(或小于)另一个字符串。算法结束。
- 否则,如果两个字符串的首位字符相等,则继续取出两个字符串各自的后一位字符进行比较。
- 重复上述步骤进行比较,直到比较完成某字符串的所有字符为止。
- 如果两个字符串的字符同时用完,那么则判定它们相等,否则未结束(还有未比较的字符)的 字符串更大
不同类型比较
当对不同类型的值进行比较时,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.&&(与)
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.||(或)
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.!(非)
特殊用法
!!value 转换为布尔值
例如:
alert( !!"non-empty string" ); // true
alert( !!null ); // false