这让我感到惊讶:
var parts = email.split('@');
if (parts < 2) {
引用:https://github.com/Kicksend/mailcheck/blob/master/src/jquery.mailcheck.js#L21-22
基本上,它看起来像:
var a = [null, null, null]
a < 2 // false
var b = [null]
b < 2 // true
所以它似乎有效,但我想知道为什么,它这样做实际上发生了什么强制?因为这里的目的是如果来自电子邮件字符串的部分少于 2 个,我希望它总是通过,因为定义的数组是真实的——它应该创建一个至少有 1 个成员的数组,即使是在一个空字符串上.
我总是更喜欢使用array.length
。以上安全吗?
最佳答案
这是一个字符串,然后是正在发生的数字转换,因为数组不能直接与 <
进行比较运算符(operator)。首先它会进行字符串比较,但随后会进行数字比较。
注意:
-
[null, null, null] == ",,"
-
[null] == ""
和:
-
+",,"
是NaN
-
+"" === 0
现在它有意义了,因为 0 < 2 === true
但是NaN < 2 === false
.
因此,这确实不是一个有意义的表达。 [null, null] < 3
是false
因为"," < 3
本质上是在做 NaN < 3
.
关于javascript - 奇怪的 array.length 替代语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813459/