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)
这究竟是什么计算的?我以前从未见过这个.
if (length === +length)
Run Code Online (Sandbox Code Playgroud)
它确保它length实际上是一个数值.
这里要理解两件事,
Strict相等运算符true仅在对象相同时才进行求值.在JavaScript中,数字和字符串是不可变的.因此,当您比较两个数字时,将比较数值.
一元+运算符将尝试获取任何对象的数值.如果对象已经是类型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)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |