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 相关文章推荐
Javascript isArray 数组类型检测函数
Oct 08 Javascript
Javascript类库的顶层对象名用户体验分析
Oct 24 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
JavaScript插件化开发教程 (三)
Jan 27 Javascript
JS基于面向对象实现的选项卡效果示例
Dec 20 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
在Vue中使用echarts的方法
Feb 05 Javascript
D3.js实现拓扑图的示例代码
Jun 30 Javascript
Element-ui tree组件自定义节点使用方法代码详解
Sep 17 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 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
php中get_object_vars()方法用法实例
2015/02/08 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
Python异常处理总结
2014/08/15 Python
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
党员教师工作决心书
2014/03/13 职场文书
初三班主任寄语大全
2014/04/04 职场文书
2014组织生活会方案
2014/05/19 职场文书
教师工作失职检讨书
2014/09/18 职场文书
2015年药店工作总结
2015/04/20 职场文书
自书遗嘱范文
2015/08/07 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
总结一些Java常用的加密算法
2021/06/11 Java/Android
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python