我之前没见过的javascript语句

Par*_*lia 3 javascript if-statement

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

if(length === +length){ //do something} 
Run Code Online (Sandbox Code Playgroud)

要么

if(length !== +length){ //do something }
Run Code Online (Sandbox Code Playgroud)

这究竟是什么计算的?我以前从未见过这个.

the*_*eye 9

if (length === +length)
Run Code Online (Sandbox Code Playgroud)

它确保它length实际上是一个数值.

这里要理解两件事,

  1. Strict相等运算符true仅在对象相同时才进行求值.在JavaScript中,数字和字符串是不可变的.因此,当您比较两个数字时,将比较数值.

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

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

"1" == +"1"
Run Code Online (Sandbox Code Playgroud)

将评估为true,因为内部"1"强制数字1和比较.但

"1" === +"1"
Run Code Online (Sandbox Code Playgroud)

将转变为

"1" === 1
Run Code Online (Sandbox Code Playgroud)

并且不会受到强制,因为类型不同,===将评估为false.如果length是任何其他类型,===将立即返回false,因为右侧是一个数字.

您可以将此检查视为此的简写版本

if (Object.prototype.toString.call(length) === "[object Number]")
Run Code Online (Sandbox Code Playgroud)