2017-01-26 64 views
0

我有联系表格。我使用js进行表单验证:严格平等比较

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

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

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

但它是行不通的。

回答

4

严格平等,值应该是相等的,以及类型应该是相同的。根据您的密码,'-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,则它们被认为是相等的。

0

Identity/Strict Equality (===)比较运营商不会进行类型转换。这是将其与常规平等分开的原因。 .indexOf()将返回一个数字,这显然与字符串-1不一样。从理论上讲,你可以把一个投向另一个,但最好的办法只是包括数字,就像这样:

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