Zen*_*hat 118 javascript
启动解释器/控制台并尝试比较
> ",,," == Array(4)
True
Run Code Online (Sandbox Code Playgroud)
为什么?起初我想也许因为你可以把",,,"想象成一个带有'\ 0'终止切片的四个字符的数组,这可能就是原因,但是
> "..." == Array(4)
Run Code Online (Sandbox Code Playgroud)
返回"False".所以为什么?我知道这是Javascript中的一些特殊的鸭子输入,但只是好奇是什么强调了这种行为.从Zed Shaw 在这里的精彩演讲中收集到了这一点.
Fel*_*ing 178
因为右手操作数转换为字符串,字符串表示Array(4)为,,,:
> Array(4).toString()
",,,"
Run Code Online (Sandbox Code Playgroud)
如果使用数组构造函数并传递数字,则会将数组的长度设置为该数字.所以你可以说你有四个空索引(相同[,,,]),数组的默认字符串表示是以逗号分隔的元素列表:
> ['a','b','c'].toString()
"a,b,c"
Run Code Online (Sandbox Code Playgroud)
比较如何工作在说明书的第11.9.3节中描述.你会看到(x == y):
8.如果Type(x)是String或Number而Type(y)是Object,则
返回比较结果x == ToPrimitive(y).
(数组是JavaScript中的对象)
如果你按照这个ToPrimitive方法,你最终会发现它调用它toString.
Som*_*ens 31
尝试使用===.==在Javascript中使用时,它会尝试转换变量,从而导致类似这样的问题.控制台正在转换Array(4)为字符串表示(即Array(4).toString),即",,,".逗号所在的原因是该.toString()函数将它们添加到数组中的单独项目.
请参阅下面的代码:
document.write( Array(4).toString() );Run Code Online (Sandbox Code Playgroud)
Kei*_*ith 18
这是因为Array(4)初始化一个包含4个空值的数组,==隐式转换,所以:
",,," == Array(4)
",,," == Array(4).toString()
",,," == ["", "", "", ""] // note 3 commas for 4 values
",,," == ["", "", "", ""].toString()
Run Code Online (Sandbox Code Playgroud)
都是相似的.
==在比较值之前进行隐式类型转换,这可能导致不可预测的结果.使用===检查的类型和价值.
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |