JS技巧之一行賦值語句能玩出多少花樣
前言
今天,來做個測試,看看一行簡單的JS賦值語句,有多少種寫法。
測試語句,僅三行:
var a=1; a=2; console.log(a);
針對第二行a=2賦值,看能變多少花樣。

第一種變化、寫入到自執(zhí)行函數(shù)中:
var a=1;
(function(){
a=2;
})();
console.log(a);
第二種變化、用eval執(zhí)行:
var a=1; eval(a=2); console.log(a);

這兩種,都比較初級,小白等級的程序員也能輕松看懂。
接下來,提升一些難度。
第三種變化、變形的eval執(zhí)行:
對eval中的賦值語句,進行一些變化。
var a=1; var b=["a","=",2]; eval(b[0]+b[1]+b[2]); console.log(a);

但eval,似乎也就能玩到這個水準。下面再展示些難度更高的。
第四種變化、利用構造函數(shù):
var a=1; [].constructor.constructor(a=2); console.log(a);
或:
var a=1; [].constructor.constructor(a=2)(); console.log(a);

第五種變化、構造函數(shù)再升級:
var a=1; var b=["a","=",2]; [].constructor.constructor(b[0]+b[1]+b[2])(); console.log(a);
如同eval執(zhí)行內(nèi)容變化一樣,對構造執(zhí)行代碼也用數(shù)組內(nèi)容拼接的方式進行變形:

第六種變化、構造函數(shù)變形:
將構造字符也放入數(shù)組中:
var a=1; var b=["a","=",2,"constructor"]; [][b[3]][b[3]](b[0]+b[1]+b[2])(); console.log(a);

第七種變化、混淆加密:
將上面的JS代碼用JShaman進行混淆加密:

得么混淆加密的JS代碼,這時數(shù)值也被加密:
/*Obfuscated by JShaman.com*/ var a=0x2c0f8^0x2c0f9; var b=['a','=',0xe3b2c^0xe3b2e,'constructor']; [][b[0xa8ddf^0xa8ddc]][b[0xb3a35^0xb3a36]](b[0x3333f^0x3333f]+b[0x84d18^0x84d19]+b[0x50958^0x5095a])(); console['log'](a);

玩這些花樣有什么用處嗎?
當然是有的,最后得到的代碼,完全看不出是在執(zhí)行a=2,賦值操作被隱藏了:

當需要對代碼進行加密,防止被他人任意閱讀時,這是很有用的方法。
你還有什么新奇的寫法嗎,歡迎探討交流。
總結
到此這篇關于JS技巧之一行賦值語句能玩出多少花樣的文章就介紹到這了,更多相關JS賦值語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript+Canvas實現(xiàn)酷炫的粒子和流星效果
這篇文章主要為大家詳細介紹了如何利用JavaScript和Canvas實現(xiàn)酷炫的粒子和流星動畫效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-01-01
JSP跨iframe如何傳遞參數(shù)實現(xiàn)代碼
表單與操作頁面分離,按鈕按下,click 或者onclick事件觸發(fā),傳遞一個唯一性的參數(shù)至子頁面JSP,感興趣的朋友可以了解下2013-09-09
layui 實現(xiàn)table翻頁滾動條位置保持不變的例子
今天小編就為大家分享一篇layui 實現(xiàn)table翻頁滾動條位置保持不變的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09

