CodeMash 2012的"Wat"谈话基本上指出了Ruby和JavaScript的一些奇怪的怪癖.
我在http://jsfiddle.net/fe479/9/上做了一个JSFiddle的结果.
下面列出了JavaScript特有的行为(我不知道Ruby).
我在JSFiddle中发现我的一些结果与视频中的结果不一致,我不知道为什么.但是,我很想知道JavaScript在每种情况下如何处理幕后工作.
Empty Array + Empty Array
[] + []
result:
<Empty String>
Run Code Online (Sandbox Code Playgroud)
+在JavaScript中使用数组时,我对运算符非常好奇.这与视频的结果相匹配.
Empty Array + Object
[] + {}
result:
[Object]
Run Code Online (Sandbox Code Playgroud)
这与视频的结果相匹配.这里发生了什么?为什么这是一个对象.什么是+运营商吗?
Object + Empty Array
{} + []
result
[Object]
Run Code Online (Sandbox Code Playgroud)
这与视频不符.该视频表明结果是0,而我得到[对象].
Object + Object
{} + {}
result:
[Object][Object]
Run Code Online (Sandbox Code Playgroud)
这与视频不匹配,输出变量如何导致两个对象?也许我的JSFiddle错了.
Array(16).join("wat" - 1)
result:
NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Run Code Online (Sandbox Code Playgroud)
做wat + 1导致wat1wat1wat1wat1......
我怀疑这只是简单的行为,试图从字符串中减去一个数字导致NaN.
虽然[] + []是一个空字符串,[] + {}是"[object Object]",{} + []是0.为什么是{} + {}NaN?
> {} + {}
NaN
Run Code Online (Sandbox Code Playgroud)
我的问题是不是为什么({} + {}).toString()是"[object Object][object Object]"同时NaN.toString()的"NaN",这部分在这里有一个答案已经.
我的问题是为什么这只发生在客户端?在服务器端(Node.js){} + {}是"[object Object][object Object]".
> {} + {}
'[object Object][object Object]'
Run Code Online (Sandbox Code Playgroud)
总结:
在客户端:
[] + [] // Returns ""
[] + {} // Returns "[object Object]"
{} + [] // …Run Code Online (Sandbox Code Playgroud) javascript eval node.js web-developer-toolbar google-chrome-devtools