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:void(0)的问题使用探讨
Apr 10 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
JS判断图片是否加载完成方法汇总(最新版)
May 13 Javascript
自制微信公众号一键排版工具
Sep 22 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
js随机生成一个验证码
Jun 01 Javascript
Javascript 编码约定(编码规范)
Mar 11 Javascript
vue移动端城市三级联动组件使用详解
Jul 26 Javascript
node 解析图片二维码的内容代码实例
Sep 11 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 Javascript
js实现点击生成随机div
Jan 16 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 七大优势分析
2009/06/23 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js中DOM三级列表(代码分享)
2017/03/20 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Python 文件操作实现代码
2009/10/07 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Python实现壁纸下载与轮换
2020/10/19 Python
如何一键升级Python所有包
2020/11/05 Python
使用Python封装excel操作指南
2021/01/29 Python
Python使用openpyxl复制整张sheet
2021/03/24 Python
暑期培训随笔感言
2014/03/10 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
村干部培训方案
2014/05/02 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
新手上路标语
2014/06/20 职场文书