js 奇葩技巧之隱藏代碼
昨天在群看到有人發(fā)了個(gè)文章叫《“短”化你的代碼》,思路非常不錯(cuò),采用unicode的零寬字符來實(shí)現(xiàn)字符隱藏,雖然有字符,可是你卻看不見它。
這篇文章詳細(xì)的介紹了這種方法的實(shí)現(xiàn)原理,最后還給出了一個(gè)生成工具。
當(dāng)然,作者算了留了一個(gè)小小的練習(xí)給我們,因?yàn)樗挥昧藘蓚€(gè)字符,導(dǎo)致轉(zhuǎn)換后的數(shù)據(jù)是原始數(shù)據(jù)的 8倍。
他給我們提供了4個(gè)零寬字符,我們就可以縮小至4倍。
好了,我們來看下代碼吧。
(function(window) { var rep = { // 替換用的數(shù)據(jù),使用了4個(gè)零寬字符,數(shù)據(jù)量減少了一半。 '00': '\u200b', '01': '\u200c', '10': '\u200d', '11': '\uFEFF' }; function hide(str) { str = str.replace(/[^\x00-\xff]/g, function(a) { // 轉(zhuǎn)碼 Latin-1 編碼以外的字符。 return escape(a).replace('%', '\\'); }); str = str.replace(/[\s\S]/g, function(a) { // 處理二進(jìn)制數(shù)據(jù)并且進(jìn)行數(shù)據(jù)替換 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);
大家可以通過最簡(jiǎn)單的代碼例子進(jìn)行測(cè)試一下,看看效果如何,也可以進(jìn)一步優(yōu)化,或者寫成插件什么的,就當(dāng)練習(xí)吧。。
雖然這個(gè)東西沒什么實(shí)際用處,不過有時(shí)候玩玩還是不錯(cuò)的,可出面試題嚇唬新人哦。。
以上就是小編為大家整理的js 奇葩技巧之隱藏代碼,希望對(duì)大家有所幫助!
相關(guān)文章
JS實(shí)現(xiàn)簡(jiǎn)單的右下角彈出提示窗口完整實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單的右下角彈出提示窗口的方法,可實(shí)現(xiàn)點(diǎn)擊連接右下角彈出提示框的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06JavaScript中的object轉(zhuǎn)換函數(shù)toString()與valueOf()介紹
這篇文章主要介紹了JavaScript中的object轉(zhuǎn)換函數(shù)toString()與valueOf()介紹,需要的朋友可以參考下2014-12-12學(xué)習(xí)drag and drop js實(shí)現(xiàn)代碼經(jīng)典之作
今天讀John Resig的Pro Javascript Techniques時(shí)候看到他書上給的一個(gè)關(guān)于drag and drop的例子, 合上書本自己寫一個(gè)簡(jiǎn)化版本的。大約20分鐘完成, 沒有考慮兼容firefox。整個(gè)代碼封裝成一個(gè)對(duì)象 也是借鑒書中的風(fēng)格。我覺得很好。2009-04-04JS 兩日期相減,獲得天數(shù)的小例子(兼容IE,FF)
這篇文章介紹了兩日期相減,獲得天數(shù)的小例子,有需要的朋友可以參考一下2013-07-07數(shù)據(jù)排序誰最快(javascript中的Array.prototype.sort PK 快速排序)
今天在51js論壇中看到一個(gè)網(wǎng)友發(fā)布了一個(gè)javasctipt實(shí)現(xiàn)的快速排序的算法,前些日子工作中也涉及到j(luò)avasctipt中數(shù)據(jù)排序的應(yīng)用,當(dāng)時(shí)為了提高排序速度,使用的也是快速排序的算法。2007-01-01動(dòng)態(tài)加載dtree.js樹treeview(示例代碼)
本篇文章主要是對(duì)動(dòng)態(tài)加載dtree.js樹treeview的示例代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12JavaScript 事件屬性綁定帶參數(shù)的函數(shù)
在JavaScript中,為了實(shí)現(xiàn)表現(xiàn)和控制相分離,可以通過0級(jí)的DOM事件屬性或者2級(jí)的事件模型來實(shí)現(xiàn),不過這兩者在針對(duì)某個(gè)事件類型調(diào)用相應(yīng)的事件句柄的時(shí)候,不能給事件句柄提供參數(shù),也就是說,事件屬性的值只能是一個(gè)函數(shù)引用。2009-03-03