js 一个等号"=" 二个等号"==" 三个等号"===" 的区别

本文详细解释了JavaScript中单等号(=)、双等号(==)与三等号(===)的区别与使用场景。重点说明了双等号与三等号在比较时的不同规则及类型转换过程。

一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。

=== 判断规则

如果类型不同,就[不相等] 
如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 
如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 
如果两个值都是true,或者都是false,那么[相等]。 
如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 
如果两个值都是null,或者都是undefined,那么[相等]。 
== 判断规则:

如果两个值类型相同,进行 === 比较。 
如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 
如果一个是null、一个是undefined,那么[相等]。 
如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 
如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 
如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核 心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我 也不大懂) 
任何其他组合,都[不相等]。

 

alert(0 == “”); // true
alert(0 == false); // true
alert(“” == false); // true

alert(0 === “”); // false
alert(0 === false); // false
alert(“” === false); // false

===用来进行严格的比较判断

alert(1 == “1″); // true

alert(1 === “1″); // false

转载来自:http://www.jsjtt.com/webkaifa/javaScript/37.html

### JavaScript 中严格相等运算符的作用 严格相等运算符 `===` 是一种用于比较两个值是否完全相同的运算符。它不仅比较数值本身,还会比较两者的 **数据类型** 是否一致[^3]。如果两者的数据类型不同,则即使它们的值看起来相同,也会返回 `false`。 #### 数据类型的匹配 当使用 `===` 运算符时,只有在被比较的两个操作数具有相同的 **数据类型** 并且其值也相同时,才会返回 `true`。例如: ```javascript var a = 1; var b = "1"; console.log(a === b); // false,因为一个是数字类型,另一个是字符串类型 ``` 上述例子中,尽管 `a` `b` 的值都是 `1`,但由于它们属于不同的数据类型(数字 vs 字符串),因此结果为 `false`[^5]。 #### 不同于宽松相等运算符 (`==`) 相比之下,宽松相等运算符 `==` 在执行比较之前会尝试进行隐式的 **类型转换**。这意味着,在某些情况下,即使是不同类型的操作数也可能被认为是相等的。例如: ```javascript var c = 0; var d = ""; console.log(c == d); // true,因为空字符串会被转换成数字0后再比较 ``` 然而,这种行为可能导致意外的结果,尤其是在处理复杂条件或边界情况时。为了避免潜在错误,通常建议尽可能使用严格相等运算符 `===` 来替代 `==`[^2]。 #### 使用场景举例 以下是几个具体的案例说明如何正确运用 `===` 运算符: ```javascript let value1 = 'hello'; let value2 = 'HELLO'.toLowerCase(); console.log(value1 === value2); // true,字符串内容类型均一致 let numberValue = 42; let stringValue = '42'; console.log(numberValue === stringValue); // false,虽然显示上相似但实际上类型不同 const booleanTrue = true; const stringTrue = 'true'; console.log(booleanTrue === stringTrue); // false,布尔型与字符串无法通过严格相等测试 ``` 以上代码片段展示了严格相等运算符能够有效区分各种可能混淆的情形。 #### 比较优先级 值得注意的是,在表达式解析过程中,严格相等运算符拥有较高的优先级级别,位于关系运算符之后但低于算术运算符之上[^4]。这一特性决定了它的求值顺序以及与其他操作符之间的相互作用方式。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值