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