JavaScript 非字母数字代码
admin
2024-04-24 21:21:11
0

JavaScript是一种松散类型的语言,它可以:

  • 类似于 true+true == 2 可以不使用数字字面量来获取数字。
  • + 符号 可以将对象类型转为字符串类型
  • ''+{} == '[object Object]'
  • 可以不用字符字面量来获取字符,例子:[object Object][1] == 'o'
  • 'abc'[0] == 'a'

以上,我们完全可以不使用数字和字母字面量来写一些js代码!

获取数字

获取数字 0 比较简单,+[] 即为 0
为了获取数字 1 就需要使用 !+!![] == 1+!+[] 等都为 1

要获取除 0 1 之外的数字,只需要使用加法即可。2 = 1 + 1废话) 即:+!+[]+!+[]

获取字母

如果要是获取字母该如何?

其实有个技巧,我们可以利用js的特点,在某些情况下js或默认调用 toString()valueOf() 函数,我们可以利用其获取字母。

例如,可以利用数组下标越界来获取类型 undefined ,然后将其隐式转换为字符串 'undefined' ,这样的话,我们就可以获取到 u n d e f 等字母!

看下面例子:

// 获取 'f'
console.log([[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]]) // 'f' 

解析:

  • 首先,设置一个空数组: []
  • 接着读取其第一个位置: [][+!+[]] ,因为为空,所以会返回 undefined
  • 当对象类型+上一个'' 时会将其转换为字符串:[][+!+[]]+[],得到字符串 'undefined'
  • 这里我们为了避免使用括号,而是使用中括号将其包围成一个数组,然后 [+[]] 读取第0个位置,即 undefined;方面后续取下标
  • 为了得到字符 f ,需要读取字符串下标为 4 的位置:[[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]]

这里我们只使用三种符号 [] + ! 即可表示字符 f,amazing!

非字母数字代码

有了以上的铺垫,现在我们可以做一些不可思议的事情:

例如,调用 slice() 函数

let _slice = [][[![]+[]][+[]][!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]]+[[][+!+[]]+[]][+[]][+!+[]+!+[]+!+[]+!+[]+!+[]]+ [[[]+[]][+[]]+{}][+[]][+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]+!+[]]] // ƒ slice() { [native code] }// 测试
let arr = [1,2,3,4];
console.log(_slice.call(arr, 2)) // [ 3, 4 ]

访问Function构造函数:

[][[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[[]+{}][+[]][+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[!![]+[]][+[]][+!+[]]+[[][[]]+[]][+[]][+[]]+[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[[]+{}][+[]][+!+[]]+[!![]+[]][+[]][+!+[]]][[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[[]+{}][+[]][+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[![]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[!![]+[]][+[]][+!+[]]+[[][[]]+[]][+[]][+[]]+[[][[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[[][[]]+[]][+[]][!+[]+!+[]]]+[]][+[]][!+[]+!+[]+!+[]]+[!![]+[]][+[]][+[]]+[[]+{}][+[]][+!+[]]+[!![]+[]][+[]][+!+[]]]
// ƒ Function() { [native code] }

参考文献

  • Executing non-alphanumeric JavaScript without parenthesis
  • Array - JavaScript | MDN

相关内容

热门资讯

沐曦股份单日盈利封王,市场给予... 12月17日,国产GPU领军企业沐曦股份(688802.SH)登陆科创板,开盘暴涨568.83%,盘...
成本四百播放破亿,AI漫剧凭什... 作者 | 乌塔编辑|李小天巨日禄创始人杰夫就曾经在公开场合预测,AI在剧集领域的首个商业化突破口将是...
贵金属发烧!铂期货上市二度涨停... 全文共2009字,阅读全文约需4分钟贵金属年末出现“发烧”行情,实现普遍轮涨。继黄金、白银价格大幅拉...
逐越鸿智以22.82亿元入主嘉... 12月16日晚间,中国食品饮料金属包装头部企业嘉美包装(002969.SZ)发布公告,苏州逐越鸿智科...
A股易拉罐生产巨头嘉美包装易主... 追觅科技创始人买下一家A股公司实控权。12月16日晚,国内金属易拉罐生产巨头嘉美包装发布多则公告,披...
金风科技:股东和谐健康完成减持... 新京报贝壳财经讯 12月17日,金风科技公告,和谐健康已完成股份减持计划,减持4222.24万股,占...
招标股份:招标集团拟减持不超3... 新京报贝壳财经讯 12月17日,招标股份公告,招标集团计划在公告披露之日起15个交易日后的3个月内,...
2025最赚钱新股诞生,超级牛... 今年A股最赚钱的新股,诞生了。今天沐曦股份正式上市,首日开盘价高达700元,较发行价104.66元暴...
同仁堂回应南极磷虾油相关报道,... 红星资本局12月17日消息,今日晚间,同仁堂(600085.SH)发布公告称,关注到网络上有关于安徽...
14亿接盘停产超1年的阿尔兹海... 截至9月30日,绿谷医药净资产仅为1036万元。作者 | 孙梦圆编辑丨于婞来源 | 野马财经押注停产...