js 奇葩技巧之隐藏代码


Posted in Javascript onAugust 11, 2017

昨天在群看到有人发了个文章叫《“短”化你的代码》,思路非常不错,采用unicode的零宽字符来实现字符隐藏,虽然有字符,可是你却看不见它。
这篇文章详细的介绍了这种方法的实现原理,最后还给出了一个生成工具。

当然,作者算了留了一个小小的练习给我们,因为他只用了两个字符,导致转换后的数据是原始数据的 8倍。
他给我们提供了4个零宽字符,我们就可以缩小至4倍。

好了,我们来看下代码吧。

(function(window) {
 var rep = { // 替换用的数据,使用了4个零宽字符,数据量减少了一半。
  '00': '\u200b',
  '01': '\u200c',
  '10': '\u200d',
  '11': '\uFEFF'
 };
 function hide(str) {
  str = str.replace(/[^\x00-\xff]/g, function(a) { // 转码 Latin-1 编码以外的字符。
   return escape(a).replace('%', '\\');
  });
  str = str.replace(/[\s\S]/g, function(a) { // 处理二进制数据并且进行数据替换
   a = a.charCodeAt().toString(2);
   a = a.length < 8 ? Array(9 - a.length).join('0') + a : a;
   return a.replace(/../g, function(a) {
    return rep[a];
   });
  });
  return str;
 }
 var tpl = '("@code".replace(/.{4}/g,function(a){var rep={"\u200b":"00","\u200c":"01","\u200d":"10","\uFEFF":"11"};return String.fromCharCode(parseInt(a.replace(/./g, function(a) {return rep[a]}),2))}))';
 window.hider = function(code, type) {
  var str = hide(code); // 生成零宽字符串
  str = tpl.replace('@code', str); // 生成模版
  if (type === 'eval') {
   str = 'eval' + str;
  } else {
   str = 'Function' + str + '()';
  }
  return str;
 }
})(window);

大家可以通过最简单的代码例子进行测试一下,看看效果如何,也可以进一步优化,或者写成插件什么的,就当练习吧。。
虽然这个东西没什么实际用处,不过有时候玩玩还是不错的,可出面试题吓唬新人哦。。

以上就是小编为大家整理的js 奇葩技巧之隐藏代码,希望对大家有所帮助!

Javascript 相关文章推荐
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
js判断字符长度及中英文数字等
Mar 19 Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 Javascript
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
javascript 中__proto__和prototype详解
Nov 25 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
jQuery实现简单弹窗遮罩效果
Feb 27 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
May 12 Javascript
react使用CSS实现react动画功能示例
May 18 Javascript
echart简介_动力节点Java学院整理
Aug 11 #Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 #Javascript
使用JS编写的随机抽取号码的小程序
Aug 11 #Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 #Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 #Javascript
Vue.js仿微信聊天窗口展示组件功能
Aug 11 #Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 #Javascript
You might like
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
理解javascript正则表达式
2016/03/08 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
python flask搭建web应用教程
2019/11/19 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
计算机专业毕业生求职信分享
2013/12/24 职场文书
党员示范岗材料
2014/12/19 职场文书
销售员岗位职责
2015/02/10 职场文书
电影建国大业观后感
2015/06/01 职场文书
Python IO文件管理的具体使用
2022/03/20 Python
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
MySQL添加索引特点及优化问题
2022/07/23 MySQL