如何理解“if ( obj.length === +obj.length )” Javascript 条件语句

How to understand "if ( obj.length === +obj.length )" Javascript condition statement?

本文关键字:length Javascript 条件 语句 +obj 何理解 if obj      更新时间:2023-09-26

我遇到了一个条件语句,我有一些难以理解。它看起来像(请注意右侧的+符号)这个:

obj.length === +obj.length .

可以解释这个条件及其目的/语法吗?
查看该声明(不知道)会给人的印象是它是某种肮脏的黑客,但我几乎可以肯定,下划线.js是一个设计良好的库,因此必须有更好的解释。

背景

  • 我发现这个语句用于下划线.js库(下划线.js注释源)的某些函数中。
  • 我的猜测是,这个条件语句在某种程度上与测试数组类型的变量obj有关?(但我完全不确定)。我试图使用此代码对此进行测试。
var myArray = [1,2,3];testResult1 = myArray.length === +myArray.length;console.log( testResult1 );打印真实var myObject = { foo : "somestring", bar : 123 };testResult2 = myObject.length === +myObject.length;console.log( testResult2 );打印错误

它同时执行两个测试:

  • 确保 obj.length 是一个数字
  • 确保 obj.length 不是 NaN(不是数字)

也可以写成:

(typeof obj.length === 'number') && !isNaN(obj.length)

更新的答案:我首先说它等同于typeof obj.length === 'number') && isFinite(obj.length)但事实并非如此,因为它对+Infinity-Infinity返回 true。感谢RobG指出这一点

一元加运算符 (+) 将 RHS 转换为数字。

这是一个测试,首先查看该值是否为数字。