我有联系表格。我使用js进行表单验证:严格平等比较
if(email.length == 0 || email.indexOf('@') == '-1'){
var error = true;
}
但我想使用严格的相等比较以获得更好的性能。所以我尝试
if(email.length === 0 || email.indexOf('@') === '-1'){
var error = true;
}
但它是行不通的。
我有联系表格。我使用js进行表单验证:严格平等比较
if(email.length == 0 || email.indexOf('@') == '-1'){
var error = true;
}
但我想使用严格的相等比较以获得更好的性能。所以我尝试
if(email.length === 0 || email.indexOf('@') === '-1'){
var error = true;
}
但它是行不通的。
严格平等,值应该是相等的,以及类型应该是相同的。根据您的密码,'-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,则它们被认为是相等的。
的Identity/Strict Equality (===
)比较运营商不会进行类型转换。这是将其与常规平等分开的原因。 .indexOf()
将返回一个数字,这显然与字符串-1
不一样。从理论上讲,你可以把一个投向另一个,但最好的办法只是包括数字,就像这样:
if (email.length == 0 || email.indexOf('@') == -1) {
... Your Code Here...
}