[JavaScript] ===,严格相等运算符和 ==
目录
1. 我想做什么/当前代码
我想获取 id 并比较它是否在对象中→当它不在时将其添加到对象中。
我的前辈给我的建议是“== 和 === 是不同的”。
function countContents( id ) {
if ( id in Obj == false ) {
//オブジェクト(Obj)にidが含まれないときは追加する
countObj[id] = id;
}
2.环境
- windows 10 版本 21H2
3. 调查
3-1.===(严格相等运算符)
比较左右操作数,当它们类型相同且值相同时返回true
。
* 操作数:指使用操作符的对象。例如,在 A + B 中,A 和 B 是操作数。
console.log(3150 === 3150); // => true
console.log(3150 === "3150"); // => false
对于对象,如果引用者是不同的对象,即使是空对象也会是false
。
// 例:フルーツのオブジェクトを作成
const objFruit1 = {};
const objFruit2 = {};
// 参照元が異なるのでfalse
console.log(objFruit1 === objFruit2); // => false
// 同じ参照を比較している場合はtrue
console.log(objFruit1 === objFruit1); // => true
3-2.==(等价运算符)
比较相同数据类型的操作数时,结果与===
相同。
* 比较不同类型的值时进行隐式类型转换。
console.log(3150 == 3150); // => true
console.log(3150 == "3150"); // => これもtrueになる
其他,JPrime描述了以下行为。
// "01"を数値にすると`1`となる
console.log(1 == "01"); // => true
// 真偽値を数値に変換してから比較
console.log(0 == false); // => true
// nullの比較はfalseを返す
console.log(0 == null); // => false
// nullとundefinedの比較は常にtrueを返す
console.log(null == undefined); // => true
通常建议使用厳密等価演算子(===)
以防止意外行为。
如果要比较不同的类型,则应显式匹配类型。
3-3.关于null和undefined
上面说的是console.log(null == undefined);
,但不是null=undefined
。
(同样没有价值。)
物品 | 内容 |
---|---|
无效的 | ・没有价值,因为没有价值可以分配。 - 不会自然发生 ·文字(※) |
不明确的 | ・没有价值,因为没有赋值 ・当访问对象中不存在的属性或数组中不存在的元素时,或者在获取没有返回值的函数的返回值时,它变得未定义。 ·多变的 |
*Literal:指在源代码中牢固地写出的字符和数字。 (例如:”太郎”
等)
但是使用等価演算子(==)
将检查未定义和空值,因此它将是true
。
3-4.未定义的例子
在 JavaScript 中声明变量的关键字有 const
、let
和 var
。
let
和 var
可以在没有初始值的情况下声明。如果未声明,它将使用默认值undefined
进行初始化。
var x;
// 「trueです」が実行される
if (x === undefined) {
console.log('trueです');
}
else {
console.log('falseです');
}
如果const
没有初始值,则会发生错误。
//上記コードのvarをconstにするとエラー
Uncaught SyntaxError: Missing initializer in const declaration (at index.html:65:7)
4.最终代码
这次想写false
时要执行的流程,所以改成===(厳密等価演算子)
。
function countContents( id ) {
if ( id in countObj === false ) {
countObj[id] = id;
}
}
五、总结
=
单一的差异可能会导致隐式类型转换等意外行为,所以我想根据情况适当使用它。
6. 参考
7. 最后
如果您能指出一些事情,我将不胜感激。
感谢您的阅读。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308622245.html