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对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
May 03 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 Javascript
js 颜色选择插件
Jan 23 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
微信小程序实现侧边分类栏
Oct 21 Javascript
详解ES6实现类的私有变量的几种写法
Feb 10 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学习 运算符与运算符优先级
2008/06/15 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
一篇不错的Python入门教程
2007/02/08 Python
基于python 字符编码的理解
2017/09/02 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
详细分析python3的reduce函数
2017/12/05 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
优秀实习生主要事迹
2014/05/29 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
支部书记四风对照材料
2014/08/28 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
追悼会家属答谢词
2015/09/29 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers