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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
js动态添加onclick事件可传参数与不传参数
Jul 29 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
使用travis-ci如何持续部署node.js应用详解
Jul 30 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
详解Vue template 如何支持多个根结点
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
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
javascript常用方法总结
2015/05/14 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
分享Python文本生成二维码实例
2016/01/06 Python
python requests 使用快速入门
2017/08/31 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
浅谈Python中的私有变量
2018/02/28 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
final, finally, finalize的区别
2012/03/01 面试题
如何写你的创业计划书
2014/01/07 职场文书
护士个人自我鉴定
2014/03/24 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
给老婆的检讨书
2015/01/27 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server