gpt4 book ai didi

javascript - 这个表达式 (({}+[])[+[]]) 在 JavaScript 中意味着什么?

转载 作者:行者123 更新时间:2023-12-02 16:38:59 24 4
gpt4 key购买 nike

现在我遇到一个奇怪的 JavaScript 表达式 console.log(({}+[])[+[]]) ,我尝试通过以下测试来理解它。

  1. console.log([])输出[]

  2. console.log(+[])输出0

所以[+[]]等于[0] ,我猜它看起来像一个数组。但是,我无法弄清楚整个表达式 ({}+[])[+[]]意味着什么?

根据第二个表达式,我想我们可以得到1 。我成功通过了console.log(+!![]) ,但是当我尝试制作2时通过console.log(+!![]++!![]) ,失败了。

这是我的想法 2 = 1 + 1 ,所以+!![]++!![]意味着 (+!![]) + (+!![]) 。谁能帮我找出失败的原因吗?

最佳答案

这没有任何用处。就像你说的,它从 ({}+[]) 的结果中获取 [0],即 [:

  1. ({}+[]) == '[object Object]' 因为您要连接两个没有常规加法方式的对象,所以这只是返回括号之间的东西是一个对象,
  2. '[object Object]'[0] == '[' 因为 [0] 始终获取字符串的第一个字符(字符串被视为包含以下内容的数组)单个字母)。

考虑到问题的第二部分,它不起作用,因为有两个加号彼此相邻,因此它假设您正在使用后缀增量(如循环中的 i++ )。只需在空格之间添加一个空格即可解决此问题:

console.log(+!![]+ +!![])
> 2

但是,由于您无论如何都要添加数组的 bool 值(此处为 1),因此您也可以保留前缀 + ,因为表达式已经将此 bool 值转换为数字:

console.log(!![] + !![])
> 2

!! 部分只是将其后面的内容转换为 bool 值。由于 !myVar 返回与 myVar 的 bool 值相反的 bool 值,因此 !(!myVar)! !myVar 将返回与此相反的 bool 值。在这种情况下,myVar 将是您的空数组[]

关于javascript - 这个表达式 (({}+[])[+[]]) 在 JavaScript 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672907/

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