在 JavaScript 中,"==" 和 "===" 都是比较运算符, 那么 "==" 和 "===" 运算符的区别是什么? 下面本篇文章就来给大家介绍一下 "==" 和 "===" 运算符之间的区别, 希望对大家有所帮助.
首先我们要知道: JavaScript 中'=='运算符表示抽象相等; 而,'===='运算符表示严格相等.
那么 JavaScript 中 == 和 === 运算符的区别是什么?
"==" 运算符会在进行相等比较之前会进行必要值的类型转换. 简单来说, 就是先把值转换为一样的类型再进行相等比较. 就算比较的值的类型不相同, 也可以通过强制转换类型成一样的, 不会发生错误.
"===" 运算符, 它不会执行类型转换, 因此如果两个值不是相同类型, 那么当比较时, 它将返回 false. 如果比较两个变量, 它们的类型彼此不兼容, 则会产生编译错误.
下面分别说明:
先说 "===", 这个比较简单. 下面的规则用来判断两个值是否 === 相等:
1, 如果类型不同, 就不相等
2, 如果两个都是数值, 并且是同一个值, 那么 [相等];(! 例外) 的是, 如果其中至少一个是 NaN, 那么 [不相等].(判断一个值是否是 NaN, 只能用 isNaN() 来判断)
3, 如果两个都是字符串, 每个位置的字符都一样, 那么相等; 否则不相等 .
4, 如果两个值都是 true, 或者都是 false, 那么相等.
5, 如果两个值都引用同一个对象或函数, 那么相等; 否则不相等.
6, 如果两个值都是 null, 或者都是 undefined, 那么相等.
再说 "=="
如果两个值类型不同, 他们可能相等. 根据下面规则进行类型转换再比较:
a, 如果一个是 null, 一个是 undefined, 那么相等.
b, 如果一个是字符串, 一个是数值, 把字符串转换成数值再进行比较.
c, 如果任一值是 true, 把它转换成 1 再比较; 如果任一值是 false, 把它转换成 0 再比较.
d, 如果一个是对象, 另一个是数值或字符串, 把对象转换成基础类型的值再比较. 对象转换成基础类型, 利用它的 toString 或者 valueOf 方法. JS 核心内置类, 会尝试 valueOf 先于 toString;
e, 任何其他组合, 都不相等.
来源: http://www.css88.com/qa/javascript/10910.html