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的Pager分页器实现代码
Jul 17 Javascript
javascript中的delete使用详解
Apr 11 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
Aug 28 Javascript
node.js ws模块搭建websocket服务端的方法示例
Apr 25 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 09 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 Javascript
vue+spring boot实现校验码功能
May 27 Vue.js
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变量存储的详解
2013/06/13 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
基于Jquery的简单图片切换效果
2011/01/06 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
详解JS模块导入导出
2017/12/20 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
js实现点赞效果
2020/03/16 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
Python中的自省(反射)详解
2015/06/02 Python
Python 爬虫图片简单实现
2017/06/01 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python解析微信dat文件的方法
2020/11/30 Python
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
PHP经典面试题
2016/09/03 面试题
采购文员岗位职责
2013/11/20 职场文书
入党转预备思想汇报
2014/01/07 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
2016国培研修心得体会
2016/01/08 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python