gpt4 book ai didi

javascript - 将 `{} + []` 分配给变量

转载 作者:可可西里 更新时间:2023-11-01 02:06:20 29 4
gpt4 key购买 nike

>> {} + []
0

因此 EmptyObject + EmptyArray 的计算结果为 0。 (免责声明:我不完全明白这是为什么。) 好吧,现在我想将这个 0 赋值给一个变量!看起来很简单:

>> var a = {} + [];
undefined
>> a
"[object Object]"

嗯,也许没那么容易。 Google 一下...... 啊哈! {} 在此上下文中 is actually a code block ,不是一个空对象。所以让我让它看起来更像一个代码块:

>> var a = 
{

}
+ [];
undefined
>> a
"[object Object]"

...该死。 自言自语:JavaScript 会忽略空格。


有什么方法可以将 {} + [](或类似的)分配给变量,但 {} + [] 的计算结果仍然是 0?

最佳答案

不,没有办法将那个确切的代码分配给一个变量并让它计算为 0,因为给出 0 的代码的解析不构成表达式†,只能分配表达式。你得到 0 的原因是因为大括号基本上被忽略为一个空语句,然后你得到表达式 + [] 的结果(即应用的一元 + 运算符到一个空数组)。因此,为了得到相同的结果,您需要更改表达式,使其刚好达到 +[]。例如,您可以执行 var a = ({}, + []),这会给您正确的答案(因为逗号导致 + [] 被评估分开)。

† 这也是您尝试分配时给出不同答案的原因。这会强制将代码解析为表达式,因此 {} 不再是空 block 并且 + 不再是一元 +,而是二进制加上一个空对象和一个空数组作为操作数。

关于javascript - 将 `{} + []` 分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769524/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com