
2024-12-1 日报 Day22

今日的鸡汤
愿你拥有坚如磐石的信念,还有无问西东的勇气。
今日学习内容
1、JS红皮书P71-72 第三章:语言基础
今日笔记
1、相等操作符:ECMAScript提供了两组操作符。第一组是等于和不等于,它们在比较之前执行转换。第二组是全等和不全等,它们在比较之前不执行转换。
2、等于和不等于(==和!=):
ECMAScript 中的等于操作符用两个等于号(==)表示,如果操作数相等,则会返回 true。不等于操作符用叹号和等于号(!=)表示,如果两个操作数不相等,则会返回 true。这两个操作符都会先进行类型转换(通常称为强制类型转换)再确定操作数是否相等。
在转换操作数的类型时,相等和不相等操作符遵循如下规则。
如果任一操作数是布尔值,则将其转换为数值再比较是否相等。false 转换为 0,true 转换为 1。
如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等。
如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法取得其原始值,再根据前面的规则进行比较。
在进行比较时,这两个操作符会遵循如下规则。
null 和 undefined 相等。
null 和 undefined 不能转换为其他类型的值再进行比较。
如果有任一操作数是 NaN,则相等操作符返回 false,不相等操作符返回 true。记住:即使个操作数都是 NaN,相等操作符也返回 false,因为按照规则,NaN 不等于 NaN。
如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true。否则,两者不相等。
下表总结了一些特殊情况及比较的结果:
表达式 | 结果 |
---|---|
null == undefined | true |
“NaN” == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
“5” == 5 | true |
3、全等和不全等(===和!==):全等和不全等操作符与相等和不相等操作符类似,只不过它们在比较相等时不转换操作数。全等操作符由 3 个等于号(===)表示,只有两个操作数在不转换的前提下相等才返回 true,比如: | |
let result1 = (“55” == 55); // true,转换后相等 | |
let result2 = (“55” === 55); // false,不相等,因为数据类型不同 | |
4、条件操作符:variable = boolean_expression ? true_value : false_value; | |
5、赋值操作符:赋值操作符用于给变量赋值。赋值操作符由等于号(=)表示,它将右侧的值赋给左侧的变量。赋值操作符的右侧可以是任何类型的值,包括变量、常量、表达式等。赋值操作符的右侧可以是任何类型的值,包括变量、常量、表达式等。 | |
复合赋值操作符: | |
乘后赋值(*=) | |
除后赋值(/=) | |
取模后赋值(%=) | |
加后赋值(+=) | |
减后赋值(-=) | |
左移后赋值(<<=) | |
右移后赋值(>>=) | |
无符号右移后赋值(>>>=) | |
这些操作符仅仅是简写语法,使用它们不会提升性能。 | |
6、逗号操作符 | |
逗号操作符可以用来在一条语句中执行多个操作,如下所示: | |
let num1 = 1, num2 = 2, num3 = 3; | |
在一条语句中同时声明多个变量是逗号操作符最常用的场景。不过,也可以使用逗号操作符来辅助赋值。在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值: | |
let num = (5, 1, 4, 8, 0); // num 的值为 0 | |
在这个例子中,num 将被赋值为 0,因为 0 是表达式中最后一项。逗号操作符的这种使用场景并不多见,但这种行为的确存在 |