Javascript 比较运算符 != vs !==.
Javascript Comparison Operators != vs !==
可能的重复项:
Javascript === vs == : 我使用哪个"等于"运算符重要吗?
JavaScript 中 == 和 === 之间的区别
我有两个变量要比较。
结果不应该相等,在什么条件下我需要使用 != 和 !== ?
因为当我使用这两个运算符时,它工作正常,但我需要确切地知道有什么区别。
关于它们差异的人类可读文本
使用!==
和===
将比==
/!=
进行更严格的比较。前者将检查要比较的对象是否属于同一类型,以及值是否匹配。
使用 ==
可以进行隐式强制转换,请参阅以下示例。
(0 == '0') // true
(0 === '0') // false
('' == 0 ) // true, the string will implicitly be converted to an integer
('' === 0 ) // false, no implicit cast is being made
标准怎么说?
11.9.6 严格相等比较
算法 比较 x === y,其中 x 和 y 是值,产生真或假。这样的比较 按如下方式执行:
- 如果 Type(x( 与 Type(y( 不同,则返回 false。
- 如果 Type(x( 是"未定义",则返回 true。
- 如果 Type(x( 为 Null,则返回 true。
如果 Type(x( 是数字,则
一个。如果 x 是 NaN,则返回 false。
b.如果 y 是 NaN,则返回 false。
三.如果 x 与 y 的数值相同,则返回 true。
d.如果 x 为 +0,y 为 -0,则返回 true。
e.如果 x 为 -0,y 为 +0,则返回 true。
f. 返回假数。
如果 Type(x( 是字符串,则如果 x 和 y 是完全相同的字符序列(相同的长度和相同的字符在 相应的职位(;否则,返回 false。
- 如果 Type(x( 是布尔值,如果 x 和 y 都为真或都为假,则返回 true;否则,返回 false。
- 如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。注意:此算法不同于同值算法 (9.12( 在处理有符号零和 NaN 时。
11.9.3 抽象相等比较算法
比较 x == y,其中 x 和 y 是值,产生 true 或 假。此类比较按如下方式执行:
如果 Type(x( 与 Type(y( 相同,则
一个。如果 Type(x( 是 Undefined,则返回 t rue。
二.如果 Type(x( 为 Null,则返回 true。
三.如果 Type(x( 是数字,则
1. If x is NaN, return false. 2. If y is NaN, return false. 3. If x is the same Number value as y, return true. 4. If x is +0 and y is 0, return true. 5. If x is 0 and y is +0, return true. 6. Return false.
d.如果 Type(x( 是字符串,则如果 x 和 y 恰好是 true 相同的字符序列(相同的长度和相同的字符 相应的职位(。否则,返回 false。
e.如果 Type(x( 是布尔值,如果 x 和 y 都为真或 都是假的。否则,返回 false。 f.如果 x 和 y 引用同一对象,则返回 true。否则,返回 false。
- 如果 x 为空且 y 未定义,则返回 true。
- 如果 x 未定义且 y 为空,则返回 true。
- 如果 Type(x( 是 Number 且 Type(y( 是 String,则返回比较结果 x == ToNumber(y(。
- 如果 Type(x( 是字符串,Type(y( 是 Number,则返回比较结果 ToNumber(x( == y。
- 如果 Type(x( 是布尔值,则返回比较结果 ToNumber(x( == y。
- 如果 Type(y( 是布尔值,则返回比较结果 x == ToNumber(y(。
- 如果 Type(x( 是字符串或数字,而 Type(y( 是 Object,则返回比较结果 x == ToPrimitive(y( 。
- 如果 Type(x( 是 Object 并且 Type(y( 是 String 或 Number,则返回比较 ToPrimitive(x( == y 的结果。
- 返回假
不同之处在于前(!=
(版本在比较之前会强制两个变量类型兼容。 因此:
"" == 0 -> true
"" === 0 -> false
另一个版本要求严格相等 - 两个值必须属于同一类型并具有相同的值。 大多数情况下,这是您应该实际使用的那个。
在对象的情况下,严格相等意味着它们实际上是同一个对象。 对象之间的比较不会对对象的内容执行逐字段比较。
有关详细信息,请参阅 https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators。
不同之处在于,仅当变量具有相同类型且不相等时,!== 才返回 true。
- 这是什么 ==- javascript 运算符
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- jQuery/JS包含运算符或类似运算符
- Javascript逻辑运算符和字符串/数字
- 模运算符前的双水平线
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- jQuery's trim()的前缀为not运算符
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- JavaScript 中三元条件和逻辑和运算符的运算符优先级
- 用于验证JS中逻辑运算符表达式的正则表达式
- 什么's是相当于LINQ's SelectMany运算符
- Performance: NaCl vs Emscripten
- JavaScript-===vs===运算符性能
- = vs === 布尔表达式的运算符
- 用于运算符中的循环内VS
- Javascript 比较运算符 != vs !==.