某网站JS的变态写法/诺禾
工作中需要查看一些网站的JS语句,打心眼里对这种语法充满了鄙夷,优雅跟它没关系,一些烂写法很难读懂,简直就是反人类,太变态了。
下面举个小例子,因为篇幅原因,就复制了一小段,看看你能看懂多少?
(window.webpackJsonp = window.webpackJsonp || [
]).push([[36],
{
1161: function (e, t) {
//some codes
},
}]);
说实话乍一看到这种代码我内心是抵触的,一眼望去就是乱糟糟的,不知道它想表达什么。不过工作需要,也只能硬着头皮往下捋。
看懂这些代码语文要学好,分段很重要,在哪断句是重点;眼神也得好,标点符号一个都不能少。于是乎,三个部分很快就被找出来。
第一部分:(window.webpackJsonp = window.webpackJsonp || [
])
第二部分:push([[36],
{…}]);
第三部分:1161: function (e, t) {
(function (t) {
e.exports = t
}).call(this, {
})
},
第一部分
因为window.webpackJsonp=window.webpackJsonp的返回值就是window.webpackJsonp,所以可以化简为:(window.webpackJsonp || []),化简后的代码也不大容易看懂,但如果了解了js的语法,也就好理解了,其实等同于:
if (window.webpackJsonp)
//什么都不干
else
window.webpackJsonp = [];
说白了,第一部分的意思就是:如果window.webpackJsonp为空,就声明window.webpackJsonp为一个数组变量;如果window.webpackJsonp不为空,那么表达式为window.webpackJsonp,执行第二部分。
第二部分
第一部分理解了,第二部分就容易了,就是push参数。绕了一个小弯的是[[36],{…}],乍一看push,应该是push(a, b)这种形式,但这里是第一层就只push了一个值,是一个二维数组;第二层才push了两个值,第一个值是36,第二个值是一个对象。
第三部分
这里的难理解之处是1161: function,这是什么鬼?
正常的写法都是 function xxx() 或 xxx: function(),纯数字难道也能作为函数名吗?正常js语法是不支持的呢。实验是检验真理的唯一标准,管它怎么写,运行一下就见分晓。
于是我做了调用测试:
alert(window.webpackJsonp[0][1].1161());
alert(window.webpackJsonp[0][1].1161);
发现这两种方式是错误的,无法运行。难道是这个数字是作为变量的序号吗?于是我尝试:
alert(window.webpackJsonp[0][1][1161]);
结果弹出了函数声明的对话框。于是更进一步:
alert(window.webpackJsonp[0][1][1161](null, null));
调用成功。
至此,难懂的JS代码终于明白其含义了。
总结
或许这些代码是前端开发故意为之,不让其他用户那么容易的理解其目的,其实前端代码再怎么混淆加密都只是时间长短而已,重要的是后端,何必呢。
某网站JS的变态写法/诺禾相关推荐
- java判断字符串写法_Mybatis3 if判断字符串变态写法
mybatis我们常用的判空操作,出现了常见问题: 错误写法:if test="status == 'Y'" 结果:抛异常NumberFormatException异常!提示内容非 ...
- [js] 一道变态题 Number.call.call(Number, undefined, 0) 等于什么?
[js] 一道变态题 Number.call.call(Number, undefined, 0) 等于什么? call 的第一个参数用于改变上下文,由于没有用到 this,第一个参数 Number ...
- 诺禾-实验技巧之WB篇
关于蛋白质免疫印迹(Western Blot,即 WB),想必做蛋白实验的小同伴们都不会生疏,作为免疫学中最常用的一种实验办法,其根本原理是经过特异性抗体对凝胶电泳处置过的细胞或生物组织样品停止着色. ...
- 诺禾-心源性猝死基因分型研究
我国心血管病危险因素流行趋势明显,导致了心血管病的发病人数增加.推算心血管病现患人数 2.9 亿,其中脑卒中 1300 万,冠心病 1100 万 , 心力衰竭 450 万,肺原性心脏病 500 万,风 ...
- 一个去中心化的免费电子书共享网站 JS解码URL和编码URL
原文链接: 一个去中心化的免费电子书共享网站 JS解码URL和编码URL 上一篇: js 一个神奇的尾递归优化 下一篇: Firefox 特性 svg mask 和clip-path的区别 https ...
- mysql语句在node.js中的写法
总结一下mysql语句在node.js中的各种写法,参考了npm网站mysql模块给的实例. 查询 select //1 db.query('select * from tuanshang_users ...
- java web网站 js 简体繁体切换_通过JS实现网站繁体简体互换
//网页简繁体转换//本js用于客户在网站页面选择繁体中文或简体中文显示,默认是正常显示,即简繁体同时显示//在用户第一次访问网页时,会自动检测客户端语言进行操作并提示.此功能可关闭//本程序只在UT ...
- js的规范写法ES5(自己以后按照这样写)
1.引号的使用,单引号' ' 优先(如果不是引号嵌套,不要使用双引号) 正常情况:console.log('hello there') 双引号转码: $("<div cl ...
- 诺禾致源css客户端,诺禾,诺禾致源:CSS 基础教学
伦多星报 2020-07-06 17:14:58 Applying CSS and JavaScript to HTML 当今您将使用的几乎所有网站都将使用CSS使它们看起来很酷,并使用JavaScr ...
最新文章
- 淘宝装修:第一日 —— 图片轮播
- springboot相关书籍文献_国内民国时期文献酸化调研与思考
- UVA1327 King‘s Quest(强连通分量、给王子们匹配公主系列 - 1 )
- python sklearn.decomposition.PCA 主成分分析, 原理详解
- 乐鑫代理启明云端分享| ESP32系列教程之五: Eclipse搭建esp-idf环境
- 记-python socket服务器端四部曲
- Understand Tasks and Back Stack--Defining launch modes
- html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
- 信息学奥赛一本通(1239:统计数字)
- iframe 滚动条不显示_HTML基础教程:Iframe的用法
- Linux 原生异步 IO 原理与使用
- 从零开始攻略PHP(9)——错误和异常处理
- 【2】使用MATLAB进行机器学习(回归)
- php微信商家转账到零钱 发起商家转账API
- javascript引入方式:嵌入式,外链式,行内式
- 如何将多个文件的简体中文名快速翻译成繁体中文
- 12306网站车票爬取
- C语言六位数字钟程序,单片机制作的6位数字钟
- wxPython 4.2.0 发布
- 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字