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 相关文章推荐
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js转义字符介绍
Nov 05 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
JS脚本实现动态给标签控件添加事件的方法
Jun 02 Javascript
JavaScript事件用法浅析
Oct 31 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
jQuery页面弹出框实现文件上传
Feb 09 Javascript
深入理解JS的事件绑定、事件流模型
May 13 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
Vue仿Bibibili首页的问题
Jan 21 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
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
我的论坛源代码(九)
2006/10/09 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
python仿evething的文件搜索器实例代码
2019/05/13 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python web框架中实现原生分页
2019/09/08 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
手术室护士个人总结
2015/02/13 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python
详解SQL报错盲注
2022/07/23 SQL Server