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 相关文章推荐
js判断变量是否未定义的代码
Mar 28 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
JavaScript获取表单内所有元素值的方法
Apr 02 Javascript
javascript数组去重的六种方法汇总
Aug 16 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 Javascript
jQuery Form表单取值的方法
Jan 11 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
JS co 函数库的含义和用法实例总结
Apr 08 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 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学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python协程的用法和例子详解
2017/09/09 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python re模块的高级用法详解
2018/06/06 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
酒店办公室文员岗位职责
2013/12/18 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
伊索寓言教学反思
2014/05/01 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
单位单身证明样本
2014/10/11 职场文书
2016年感恩节寄语
2015/12/07 职场文书