JS - 对象文字转换为数字?

时间:2016-08-23 00:20:59

标签: javascript syntax

在Chrome的开发控制台中玩游戏时,我发现了一些我不明白的事情:

  • ({})+""评估为"[object Object]",正如我预期的那样
  • {}+""评估为0(数字)

在任一表达式中用{}替换{foo:"bar"}并不会更改结果,因此它似乎被解析为对象文字。将""替换为"42"会产生42,并将其替换为"foo"会产生NaN

这里发生了什么?

1 个答案:

答案 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"}