严格的平等比较

时间:2017-01-26 15:21:16

标签: javascript equality

我有联系表格。我使用js进行表单字段验证:

if(email.length == 0 || email.indexOf('@') == '-1'){
    var error = true;
}

但我想使用严格的相等比较来获得更好的性能。所以我试试

if(email.length === 0 || email.indexOf('@') === '-1'){
        var error = true;
    }

但这不起作用。

2 个答案:

答案 0 :(得分:4)

对于Strict Equality,值应该相等,并且类型应该相同。根据您的代码,'-1'的类型为string,但indexOf会返回number。 ===运算符不进行转换,因此即使值相等但类型不同,===也只会返回false。

您可以尝试使用typeof运算符来查找类型。

因此,如果您尝试typeof '-1',则会返回"字符串"
 typeof 'email.indexOf('@')会返回"号码"

因此,正确的做法是删除数字-1周围的引号,如下所示。

if(email.length === 0 || email.indexOf('@') === -1){
            var error = true;
        }

来自MDN

  

严格相等性比较两个相等的值。这两个价值都不是   在比较之前隐式转换为其他值。如果   值具有不同的类型,值被认为是不相等的。   否则,如果值具有相同的类型而不是数字,   如果它们具有相同的值,则认为它们是相等的。最后,如果两者都有   值是数字,如果它们都不是NaN,则它们被认为是相等的   并且是相同的值,或者如果一个是+ 0而一个是-0。

答案 1 :(得分:0)

Identity / Strict Equality (===)比较运算符不会转换类型。这就是它与正常平等的区别。 .indexOf()将返回一个数字,该数字(显然)与字符串-1不同。从理论上讲,你可以将一个投射到另一个,但最好的方法就是包括数字,如下:

if (email.length == 0 || email.indexOf('@') == -1) {
  ... Your Code Here...
}