我之前没见过的javascript语句

时间:2014-08-02 17:13:11

标签: javascript if-statement

我正在检查一些用UnderscoreJS编写的Javascript代码。在这里,有很多JS代码的实例是这样编写的:

if(length === +length){ //do something} 

if(length !== +length){ //do something }

这到底是什么计算的?我以前从未见过这个。

2 个答案:

答案 0 :(得分:9)

if (length === +length)

确保length实际上是一个数值。

这里要理解两件事,

  1. The Strict equality operator, will evaluate to true only when the objects are the same。在JavaScript中,数字和字符串是不可变的。因此,当您比较两个数字时,将比较数字值。

  2. 一元+运算符将尝试获取任何对象的数值。如果对象已经是Number类型,它将不会进行任何更改并按原样返回对象。

  3. 在这种情况下,如果length实际上是字符串格式的数字,请说"1",表达式

    "1" == +"1"
    

    将评估为true,因为"1"会在内部强制转换为数字1并进行比较。但

    "1" === +"1"
    

    将转换为

    "1" === 1
    

    并且不会进行强制,因为类型不同,===会评估为false。如果length属于任何其他类型,===会立即返回false,因为右侧是数字。

    您可以将此检查视为此

    的简写版本
    if (Object.prototype.toString.call(length) === "[object Number]")
    

答案 1 :(得分:3)

这是一种测试值是否为数字的方法。请参阅此示例:

> length="string"
> length === +length
false
> length=2
> length === +length
true

一元+将变量length转换为数字类型,因此如果它已经是数字,那么将满足标识。

使用标识运算符===而不是等于运算符==在这里很重要,因为它严格比较了操作数的值和类型。

执行相同测试的方式可能更明确(但稍长一些):

typeof length === "number"