摘要:前几天李老哥秀了一个中骚操作给我看,即的值是各位也可以看一下卧槽,牛逼啊很好奇,如何得到这个结果,莫名其妙就得到了我第一感觉是不可能啊,可是结果就在那这就要思考了,这个是什么码的骚操作计算得来的数字结果还是字符转化,或是别的什么,它是通过什
前几天李老哥秀了一个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")会输出什么?
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97911.html
摘要:结论一维数组在内存中是连续存放的二维数组关于二维数组的创建二维数组中的表示行数,表示列数注意二维数组的不完全初始化剩下的元素也都默认为。示例如下关于二维数组的打印我们通过二维数组的下标来进行打印,而二维数组的行和列下标都是从开始的。 目录 一维数组 关于一维数组的创建 关于数组的打印 关...
摘要:表单用于向服务器传输数据。属性对象的属性指定了一个事件句柄函数。标签的属性应当与相关元素的属性相同。详情查阅请狠狠地点击关于对象代表表单中的一个提交按钮在表单提交之前,触发事件句柄,并且一个句柄可以通过返回来取消表单提交。 系列文章 关于前端上传文件全面基础扫盲贴(零)关于前端上传文件全面基础扫盲贴(一) ----- XMLHttpRequest关于前端上传文件全面基础扫盲贴(二) -...
摘要:安全生成安全的随机数,加密数据,扫描漏洞的库一个兼容标准的过滤器一个生成随机数和字符串的库使用生成随机数的库一个安全库一个纯安全通信库一个简单的键值加密存储库一个结构化的安全层一个试验的面向对象的包装库一个扫描文件安全的库 Security 安全 生成安全的随机数,加密数据,扫描漏洞的库 HTML Purifier-一个兼容标准的HTML过滤器 RandomLib-一个生成随机数和字...
摘要:安全生成安全的随机数,加密数据,扫描漏洞的库一个兼容标准的过滤器一个生成随机数和字符串的库使用生成随机数的库一个安全库一个纯安全通信库一个简单的键值加密存储库一个结构化的安全层一个试验的面向对象的包装库一个扫描文件安全的库 Security 安全 生成安全的随机数,加密数据,扫描漏洞的库 HTML Purifier-一个兼容标准的HTML过滤器 RandomLib-一个生成随机数和字...
阅读 3491·2023-04-25 17:35
阅读 2570·2021-11-24 09:39
阅读 2513·2021-10-18 13:32
阅读 3397·2021-10-11 10:58
阅读 1617·2021-09-26 09:55
阅读 6103·2021-09-22 15:47
阅读 946·2021-08-26 14:15
阅读 3447·2019-08-30 15:55