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中对对层的控制
Dec 29 Javascript
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
Aug 24 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
Jun 12 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
jQuery实现Select左右复制移动内容
Aug 05 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 Javascript
vue vant Area组件使用详解
Dec 09 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连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
jQuery网页右侧广告跟随滚动代码分享
2020/04/20 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
react路由配置方式详解
2017/08/07 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
python从sqlite读取并显示数据的方法
2015/05/08 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
python清理子进程机制剖析
2017/11/23 Python
Python Web版语音合成实例详解
2019/07/16 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
中学教师岗位职责
2013/11/26 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
标准版离职证明书
2014/09/12 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP