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 相关文章推荐
Prototype Hash对象 学习
Jul 19 Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
Javascript 复制数组实现代码
Nov 26 Javascript
js文件包含的几种方式介绍
Sep 28 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
jQuery实现html表格动态添加新行的方法
May 28 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
May 03 Javascript
分享12个非常实用的JavaScript小技巧
May 11 Javascript
js监听input输入框值的实时变化实例
Jan 26 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
Jun 24 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
Aug 03 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
动态加载js的几种方法
2006/10/23 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
python实现同一局域网下传输图片
2020/03/20 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
Python中生成ndarray实例讲解
2021/02/22 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
int和Integer有什么区别
2013/05/25 面试题
中间件的定义
2016/08/09 面试题
学生党员思想汇报范文
2014/01/09 职场文书
负责人任命书范本
2014/06/04 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS