我在这里缺少什么? zipcode有一个有效的长度,但if代码有一个红色的波浪形。这总是我用双管道在jquery中使用Or的方式。如果我将这两个条件括在括号中,那么我会得到一个蓝色的波浪形,说条件总是正确的,这怎么可能?这段代码语法有什么问题?
//testing here if its usa, if so run code below
alert(zipcode.length);
if (zipcode.length = 5 || zipcode.length = 9) {
zip.addClass("isvalid");
zip.css("border", "1px solid lightgray");
} else {
zip.css("border", "2px solid red");
alert("Invalid postal code entry, number is 5 or 9 digits");
zip.focus();
}
答案 0 :(得分:3)
if (zipcode.length == 5 || zipcode.length == 9)
答案 1 :(得分:0)
再次查看条件:
zipcode.length = 5 || zipcode.length = 9
=
是赋值运算符,逻辑运算符或运算符的优先级高于赋值运算符,因此该行的计算结果如下:
zipcode.length = (5 || zipcode.length) = 9
5 || myvar
将在JavaScript中评估为5
,因此您获得了
zipcode.length = 5 = 9
9
无法分配给5
,因此您收到错误。
如果我将这两个条件括在括号中,那么我会得到一个蓝色的波浪形,说条件总是正确的,这怎么可能?
在评估时考虑该陈述:
(zipcode.length = 5) || (zipcode.length = 9)
5 || (zipcode.length = 9)
true || (zipcode.length = 9)
true
如果zipcode
是字符串与数组相对于其他类型的对象,并尝试在其上设置length
属性,则完全不考虑可能出现的任何问题!< / p>
所有这些归结为=
(赋值)与==
或===
(相等)不是同一个运算符的真正问题。如果您只是在每一侧添加一个额外的等号,那么您突然将的邮政编码长度与5和9进行比较,而不是设置邮政编码的长度。