我有联系表格。我使用js进行表单字段验证:
if(email.length == 0 || email.indexOf('@') == '-1'){
var error = true;
}
但我想使用严格的相等比较来获得更好的性能。所以我试试
if(email.length === 0 || email.indexOf('@') === '-1'){
var error = true;
}
但这不起作用。
答案 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...
}