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 相关文章推荐
JavaScript 原型继承
Dec 26 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
Oct 17 Javascript
jQuery把表单元素变为json对象
Nov 06 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
jQuery获取页面元素绝对与相对位置的方法
Jun 10 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
Oct 11 Javascript
JQuery事件委托原理与用法实例分析
May 13 jQuery
vue实现按需加载组件及异步组件功能
May 27 Javascript
jquery实现聊天机器人
Feb 08 jQuery
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
prettier自动格式化去换行的实现代码
Aug 25 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环境搭建最新方法
2006/09/05 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
把input初始值不写value的具体实现方法
2013/07/04 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python对文件操作知识汇总
2016/05/15 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
python如何使用腾讯云发送短信
2020/09/17 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
植物选择:Botanic Choice
2017/02/15 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
查环查孕证明
2014/01/10 职场文书
股权转让协议书
2014/04/12 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android