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 相关文章推荐
jQuery动态地获取系统时间实现代码
May 24 Javascript
动态改变div的z-index属性的简单实例
Aug 08 Javascript
jquery实现的省市区三级联动
Apr 02 Javascript
javascript属性访问表达式用法分析
Apr 25 Javascript
JS实现图片剪裁并预览效果
Aug 12 Javascript
JS模拟实现ECMAScript5新增的数组方法
Mar 20 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
webpack中如何加载静态文件的方法步骤
May 18 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 Javascript
threejs太阳光与阴影效果实例代码
Apr 05 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危险函数(disable_functions)
2012/02/23 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
Python实现把数字转换成中文
2015/06/29 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
如何做好总经理助理
2013/11/12 职场文书
大学生创业感言
2014/01/25 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
道路交通安全实施方案
2014/03/12 职场文书
校运会新闻稿
2015/07/17 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB