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 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
Javascript 键盘keyCode键码值表
Dec 24 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
js实现广告漂浮效果的小例子
Jul 02 Javascript
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
Aug 24 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 jQuery
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 Javascript
vue实现广告栏上下滚动效果
Nov 26 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
php你的验证码安全码?
2007/01/02 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
javascript事件模型介绍
2016/05/31 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Python3实现的字典遍历操作详解
2018/04/18 Python
python爬虫添加请求头代码实例
2019/12/28 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
Html5 new XMLHttpRequest()监听附件上传进度
2021/01/14 HTML / CSS
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
装修五一活动策划案
2014/01/23 职场文书
大型车展策划方案
2014/02/01 职场文书
党员干部一句话承诺
2014/05/30 职场文书
2014年商场工作总结
2014/11/22 职场文书
中层干部考核评语
2015/01/04 职场文书
2015年女生节活动总结
2015/02/27 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
电影建党伟业观后感
2015/06/01 职场文书
大国崛起观后感
2015/06/02 职场文书
高一地理教学工作总结
2015/08/12 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL