javascript - 奇怪的 array.length 替代语法

标签 javascript

这让我感到惊讶:

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] < 3false因为"," < 3本质上是在做 NaN < 3 .

关于javascript - 奇怪的 array.length 替代语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813459/

相关文章:

javascript - Div用jQuery的延迟功能关闭和打开

javascript - 如何确定给定字符串是否代表日期?

javascript - sessionStorage 什么时候真正被清除了?

javascript - php中如何将注册页面数据验证后插入mysql表

javascript - 标记的自定义 Vaadin 组件未添加到 MainView 布局中

javascript - 如何在 php codeigniter 中添加来自 CRUD ajax 的数据?

javascript - 如何使用 JavaScript 调用此函数?

javascript - 使用 header 位置和传递参数重定向 php

Javascript onclick不起作用,连续点击多个图像

javascript - 星级 : ignore mouseout if i trigger a certain function