为什么 JavaScript 中的 “,,,” == Array(4)
Why does ",,," == Array(4) in JavaScript?
>启动您的解释器/控制台并尝试比较:
> ",,," == Array(4)
True
为什么? 起初我想也许因为您可以将",,,"视为带有"''0"终止切片的四个字符的数组,这可能就是原因,但是
> "..." == Array(4)
返回"假"。 所以。。。为什么? 我知道这是JavaScript中一些特殊的鸭子输入,但我只是好奇是什么强调了这种行为。 顺便说一句,我从 Zed Shaw 在这里的精彩演讲中收集到了这一点。
因为右操作数被转换为字符串,并且Array(4)
的字符串表示形式,,,
:
> Array(4).toString()
",,,"
如果使用数组构造函数并传递一个数字,它将数组的长度设置为该数字。所以你可以说你有四个空索引(与[,,,]
相同),数组的默认字符串表示是其元素的逗号分隔列表:
> ['a','b','c'].toString()
"a,b,c"
比较的工作原理在规范的第 11.9.3 节中描述。在那里你会看到(x == y
):
8. 如果 Type(x) 是字符串或数字,而 Type(y) 是 对象,
返回比较结果 x == ToPrimitive(y)。
(数组是 JavaScript 中的对象)
如果你遵循ToPrimitive
方法,你最终会发现它调用toString
.
尝试使用 ===
. 在 JavaScript 中使用 ==
时,它会尝试转换变量,从而导致这样的问题。 控制台正在Array(4)
转换为字符串表示形式(即 Array(4).toString
),即 ",,,"
。 逗号存在的原因是 .toString()
函数将它们添加到数组中的单独项目。
请参阅下面的代码片段:
document.write( Array(4).toString() );
在内部,它会:
",,," == Array(4).toString()
这是因为Array(4)
初始化一个包含 4 个空值的数组,一个隐式转换的==
,因此:
",,," == Array(4)
",,," == Array(4).toString()
",,," == ["", "", "", ""] // note 3 commas for 4 values
",,," == ["", "", "", ""].toString()
都差不多。
==
在比较值之前执行隐式类型转换,这可能会导致不可预知的结果。使用===
检查类型和值。
进行比较之前,将数组与字符串进行比较会强制将数组转换为字符串。将空的 4 元素数组强制转换为字符串会生成该确切字符串。
我最初以为是"原型"的东西......但经过一番调查,我得出了一个可悲的结论......
显然,这是一个内部的、更晦涩的 JavaScript 东西,没有太多的逻辑......
试试吧
Array(4)==Array(4)
也没有对类型进行胁迫...
Array(4)===Array(4)
你会得到假的。
你知道null==null
,null===null
甚至undefined==undefined
和undefined===undefined
返回TRUE...所以。。。有点晦涩难懂...
Array(4)==[,,,]
也应该是真的。
- Javascript 新的 Array 和 join() 方法
- Javascript setTimeout for an array
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 在Jquery/Javascript中的Array中插入Textbox值
- 根据 Array Javascript 中的字符串值动态创建数组名称
- Multidim json array javascript,如何抓取值
- 将内容插入Array Javascript
- 无法读取 ARRAY Javascript 中未定义的属性“0”
- 如何从 Array Javascript 获取对象
- 在新的 Array Javascript 中对对象中的部分重复对象进行计数和记录
- multi array JavaScript
- 如果数组中的元素在加载之前无法定义,则如何加入Array JavaScript
- ARRAY javascript indexOf
- Select Box PHP Array => Javascript On Click Div
- 使用array (JavaScript)创建一个简单的next / previous链接
- MultiSelect Array (Javascript to MySql)
- 通过Array(JavaScript,D3)按照给定的顺序对JSON进行排序
- getElementById with an array Javascript
- Id's in array javascript
- HTML table to array javascript