在Chrome的开发控制台中玩游戏时,我发现了一些我不明白的事情:
({})+""
评估为"[object Object]"
,正如我预期的那样{}+""
评估为0
(数字)在任一表达式中用{}
替换{foo:"bar"}
并不会更改结果,因此它似乎被解析为对象文字。将""
替换为"42"
会产生42
,并将其替换为"foo"
会产生NaN
。
这里发生了什么?
答案 0 :(得分:1)
语法的上下文会发生变化。
> DF2
Date Time Subject AB V2 V3 V4 V5
1 01/01/2016 12:00:00 Subject1 A 1 2 4 1
2 01/01/2016 12:00:00 Subject1 A 2 1 2 3
3 01/01/2016 12:00:00 Subject1 A 1 0 2 7
4 01/01/2016 12:00:00 Subject1 B 2 3 0 1
5 01/01/2016 12:00:00 Subject1 B 4 1 1 2
6 01/01/2016 12:00:00 Subject1 B 3 5 2 8
7 01/01/2016 12:00:00 2 A 8 2 0 1
8 01/01/2016 12:00:00 2 A 9 1 2 7
9 01/01/2016 12:00:00 2 A 1 6 2 7
10 01/01/2016 12:00:00 2 B 2 3 2 0
11 01/01/2016 12:00:00 2 B 6 7 1 2
12 01/01/2016 12:00:00 2 B 3 3 2 4
是一个对象文字表达式,用于评估新对象,因此代码实际上是$(".modal").on("hidden.bs.modal", function() { // any time a modal is hidden
var urlReplace = window.location.toString().split('#', 1)[0]
history.pushState(null, null, urlReplace); // push url without the hash as new history item
});
。括号在这里定义,因为它们导致代码被解析为“(..some expression ..)”。
({})
被解析为anObject+""
,因为{}被解析为空块(而不是对象文字)。这使得代码等效于{}+""
,产生0。
{};+""
被解析为块,带有标签(“foo”)到单数表达式“bar”。没有对象字面值。
将+""
解析为对象文字表达式的一些(有用)方法:
{foo:"bar"}