JavaScript最牛逼代码语句

下面这段代码是JavaScript中最牛逼的表达式

	([][[]] + [])[+!![]] + ([] + {})[+!![] + +!![]]

为什么说这个表达式是最牛逼的表达式呢?我们把它放浏览器内执行一下
输出如下,怎么样,牛不牛逼
在这里插入图片描述
那它为什么会输出这么一个玩意儿呢,我们先把它拆解一下

([][[]] + [])[+!![]] + ([] + {})[+!![] + +!![]]

可以看成是两部分

([][[]] + [])[+!![]] +
([] + {})[+!![] + +!![]]

先看上部分

([][[]] + [])[+!![]]

可以看出这是一个取下标的表达式,括号内的
那么具体分析

[][[]] + []  
//空数组的第[]个元素,我们都知道[]转成字符串是空字符串也就是''
//那[][[]]的语义就是取空数组的第''个元素,即[]['']
//很明显[]里面没有下标为''的元素
//那么[][[]]值就是undefined
//看到这里相信各位都已经明白
//为什么([][[]] + [])[+!![]] + ([] + {})[+!![] + +!![]]这么个玩意儿为什么会输出'nb'
//闲话少说现在括号内的式子已经变成了undefined+[]
//undefined+[]一个原始类型加上一个空数组
//空数组就也得转成原始类型,那[]就转化成了'',一个空字符串
//undefined+'' 也就是 undefined加字符串,那么就变成了'undefined'
//第一部分的式子也就由
([][[]] + [])[+!![]]
//变为了
'undefined'[+!![]]
//那+!![]一转就是1
// 式子就变为了
 'undefined'[1]
// 也就是 'n'

第二部分分析

([] + {})[+!![] + +!![]]
//还是先分析前半段
([]+{})
//空数组加空对象,很明显,又是基础知识 ->类型转换
// 即 '' + '[object object]'
//也就是说
//([]+{}) 转换后是 '[object object]'
//即
'[object object]'[+!![] + +!![]]
//至于后半段就不赘述了,和前面一样
//这时候式子就变成了
'[object object]'[2]
// 输出为 'b'

也就是说

([][[]] + [])[+!![]] + ([] + {})[+!![] + +!![]]

转换后就是

 'undefined'[1] + '[object object]'[2]

输出
nb

最后,我想说的是如果你从一开始就明白了还看到这,那你是真正的

(![] + [])[+!![] + !![] + !![]] + ([] + {})[+!![] + +!![]]

我的朋友,你是真正的

(![] + [])[+!![] + !![] + !![]] + ([] + {})[+!![] + +!![]]

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qayrup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值