关于++[[]][+[]]+[+[]]

解析JavaScript中++[[]][+[]]+[+[]]为何等于'10',深入探讨其背后的字符串拼接与类型转换机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天李老哥秀了一个JavaScript中骚操作给我看,即++[[]][+[]]+[+[]]的值是10;
各位也可以看一下

console.log(++[[]][+[]]+[+[]])
10

卧槽,牛逼啊!
很好奇,js如何得到这个结果,莫名其妙就得到了10;我第一感觉是不可能啊,可是结果就在那;这就要思考了,这个10是什么?ASCII码的骚操作计算得来的数字结果还是字符转化,或是别的什么,它是通过什么方式得来的,先输出一下它的类型:

console.log((typeof ++[[]][+[]]+[+[]]))
string

看看发现了什么?!可以走捷径了,10是一个字符串,即是说得到是'10',由此想到了什么?没错,就是字符串拼接,再来看看++[[]][+[]]+[+[]]的结构和'10'本身,很明显10是由++[[]][+[]][+[]]拼接的,可以大胆猜测,++[[]][+[]]结果是1,[+[]]结果是0,于是:

 console.log(++[[]][+[]])
    1
 console.log([+[]])
    [0]

猜测与结果虽有出入,却也没偏离太远,问题大概解决一半了:
在JavaScript中,+[]是等于零的,就是说console.log(+[] === 0)得到的是true;

就是说呢,现在问题变成了++[[]][0]+[0]
实际上,[[]][0]意思是在数组[[]]中找到第0个元素,我们找到的会是[],这有什么意义呢,先跳过,++[[]][0]的结果为1,这里我们可以忽略[[]][0]把它当成任一个值,因为重点是++递增运算符,我们知道++任意值意为依次加一,即是+(任意值+1),++[[]][0]可以转为+[]+1(这里需要留意一个小细节,就是++递增运算符会把值返回为Number类型);
所以问题就变成了1+[0]
在js中[0] == '0',
问题就变成了1+'0' === '10';
那么来猜一猜console.log(1+'0' === '10')会输出什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值