2013-10-09 24 views
6

如果您评估{} + 1,您会得到1,但如果将相同的表达式分配给变量(例如x = {} + 1),则该变量将包含字符串"[object Object]1"JavaScript的分配改变了加法操作的语义?

为什么赋值会改变右侧表达式的语义?右手表达不应该是“上下文无关”吗?

+1

在什么情况下你能得到'1'的结果? –

+0

你不会在任何地方得到'1'。在'node.js'中,你不明白它。在Chrome和Firefox中是的。 – thriqon

+0

http://jsfiddle.net/praveen_jegan/jgMGs/'{} + 1!== 1' – Praveen

回答

7
{} + 1 

被解释为一个码块,随后+1,其评估对1。 OTOH:

new Object() + 1 

你会看到"[object Object]1"结果:

x = {} + 1 

如果您改变了原来的语句被评估为new Object()1

+0

优秀!一个非常明确的答案!谢谢。 – MSX