บทความนี้อธิบายการเข้ารหัส Base64, การเข้ารหัส MD5 และการเข้ารหัส SHA1 ที่ดำเนินการโดย JS แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. การเข้ารหัส base64
แนะนำไฟล์ base64.js ลงในหน้าและวิธีการโทรคือ:
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> base64 การเข้ารหัส </title> <script type = "text/javascript" src = "base64.js"> </script> <script type = "text/javascript" var str = b.encode ("admin: admin"); การแจ้งเตือน ("base64 encode:" + str); // decrypt str = b.decode (str); การแจ้งเตือน ("base64 decode:" + str); </script> </head> <body> </body> </html>2. การเข้ารหัส MD5
อ้างถึงไฟล์ md5.js ในหน้าและวิธีการโทรคือ
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> การเข้ารหัส md5 </title> <script type = "text/ecmascript" src = "md5.js"> </script> <script type = "ข้อความ/javascript" การแจ้งเตือน (แฮช) </script> </head> <body> </body> </html>
3. การเข้ารหัส sha1
ว่ากันว่านี่เป็นการเข้ารหัสที่ปลอดภัยที่สุด
หน้าแนะนำ sha1.js และวิธีการโทรคือ
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> การเข้ารหัส sha1 </title> <script type = "text/ecmascript" src = "sha1.js"> </script> <script type = "ข้อความ/javascript" การแจ้งเตือน (sha) </script> </head> <body> </body> </html>
นี่คือซอร์สโค้ดสำหรับ JS
base64.js:
/**** base64 encode /decode ** @author haitao.tu*@date 2010-04-26*@email [email protected]**/function base64 () {// ทรัพย์สินส่วนตัว _keystr = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/="; // วิธีการสาธารณะสำหรับการเข้ารหัส this.encode = function (อินพุต) {var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode (อินพุต); ในขณะที่ (i <input.length) {chr1 = input.charcodeat (i ++); chr2 = input.charcodeat (i ++); Chr3 = input.charcodeat (i ++); enc1 = Chr1 >> 2; Enc2 = ((Chr1 & 3) << 4) | (Chr2 >> 4); Enc3 = ((Chr2 & 15) << 2) | (Chr3 >> 6); Enc4 = Chr3 & 63; if (isnan (chr2)) {enc3 = enc4 = 64; } อื่นถ้า (isnan (chr3)) {enc4 = 64; } output = output + _keystr.charat (enc1) + _keystr.charat (enc2) + _keystr.charat (enc3) + _keystr.charat (enc4); } return output; } // วิธีการสาธารณะสำหรับการถอดรหัส this.decode = function (อินพุต) {var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace (/[^a-za-z0-9/+/// =]/g, ""); ในขณะที่ (i <input.length) {enc1 = _keystr.indexof (input.charat (i ++)); enc2 = _keystr.indexof (input.charat (i ++)); enc3 = _keystr.indexof (input.charat (i ++)); enc4 = _keystr.indexof (input.charat (i ++)); Chr1 = (enc1 << 2) | (Enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (Enc3 >> 2); Chr3 = ((Enc3 & 3) << 6) | Enc4; เอาต์พุต = เอาต์พุต + สตริง FromCharcode (Chr1); if (enc3! = 64) {output = output + string.fromCharcode (chr2); } if (enc4! = 64) {output = output + string.fromCharcode (chr3); }} output = _UTF8_DECODE (เอาต์พุต); เอาต์พุตกลับ; } // วิธีส่วนตัวสำหรับ UTF-8 การเข้ารหัส _UTF8_ENCODE = ฟังก์ชัน (สตริง) {string = string.replace (// r/n/g, "/n"); var utftext = ""; สำหรับ (var n = 0; n <string.length; n ++) {var c = string.charcodeat (n); if (c <128) {utftext += string.fromCharcode (c); } อื่นถ้า ((c> 127) && (c <2048)) {utftext += string.fromCharcode ((c >> 6) | 192); utftext += string.fromCharcode ((C & 63) | 128); } else {utftext += string.fromCharcode ((c >> 12) | 224); utftext += string.fromCharcode ((c >> 6) & 63) | 128); utftext += string.fromCharcode ((C & 63) | 128); }} return utftext; } // วิธีการส่วนตัวสำหรับการถอดรหัส UTF-8 _UTF8_DECODE = function (utftext) {var string = ""; var i = 0; var c = c1 = c2 = 0; ในขณะที่ (i <utftext.length) {c = utftext.charcodeat (i); if (c <128) {string += string.fromCharcode (c); i ++; } อื่นถ้า ((c> 191) && (c <224)) {c2 = utftext.charcodeat (i+1); String += String.FromCharcode ((C & 31) << 6) | (C2 & 63)); i += 2; } else {c2 = utftext.charcodeat (i+1); c3 = utftext.charcodeat (i+2); String += String.FromCharcode ((C & 15) << 12) | ((C2 & 63) << 6) | (C3 & 63)); i += 3; }} return String; -
MD5.JS:
/ * * การใช้งาน JavaScript ของ RSA Data Security, Inc. MD5 Message * Digest Algorithm ตามที่กำหนดไว้ใน RFC 1321. * เวอร์ชัน 2.1 ลิขสิทธิ์ (c) Paul Johnston 1999 - 2002 * ผู้มีส่วนร่วมอื่น ๆ : Greg Holt, Andrew Kepert, Ydnar, Lost http://pajhome.org.uk/crypt/md5 สำหรับข้อมูลเพิ่มเติม * // * * ตัวแปรที่กำหนดค่าได้ คุณอาจต้องปรับแต่งสิ่งเหล่านี้ให้เข้ากันได้กับ * ฝั่งเซิร์ฟเวอร์ แต่ค่าเริ่มต้นทำงานในกรณีส่วนใหญ่ */var hexcase = 0; /* รูปแบบเอาต์พุต hex 0 - ตัวพิมพ์เล็ก; 1 - uppercase */var b64pad = ""; /* อักขระ Base-64 PAD "=" สำหรับการปฏิบัติตาม RFC ที่เข้มงวด */var chrsz = 8; /* บิตต่ออักขระอินพุต 8 - ASCII; 16 - Unicode * // * * นี่คือฟังก์ชั่นที่คุณมักจะต้องการเรียก * พวกเขาใช้อาร์กิวเมนต์สตริงและส่งคืน hex หรือ base -64 strings encoded */function hex_md5 (s) {return binl2hex (core_md5 (str2binl (s), s.length * chrsz); binl2b64 (core_md5 (str2binl (s), s.length * chrsz));} ฟังก์ชั่น str_md5 (s) {return binl2str (core_md5 (str2binl (s), s.length * chrsz); ข้อมูล)); } ฟังก์ชั่น b64_hmac_md5 (คีย์, ข้อมูล) {return binl2b64 (core_hmac_md5 (คีย์, ข้อมูล)); } ฟังก์ชั่น str_hmac_md5 (คีย์, ข้อมูล)); } ฟังก์ชั่น str_hmac_md5 (คีย์, ข้อมูล) {return binl2str (core_hmac_md5 (คีย์, ข้อมูล)); }/ * * ทำการทดสอบตัวเองอย่างง่ายเพื่อดูว่า VM ทำงานได้หรือไม่ */ฟังก์ชั่น md5_vm_test () {return hex_md5 ("abc") == "900150983cd24fb0d6963f7d28e17f72"; core_md5 (x, len) { / * ภาคผนวก padding * / x [len >> 5] | = 0x80 << ((len) % 32); x [((((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; สำหรับ (var i = 0; i <x.length; i += 16) {var old = a; var oldb = b; var oldc = c; var เก่า = d; a = md5_ff (a, b, c, d, x [i+ 0], 7, -680876936); d = md5_ff (d, a, b, c, x [i+ 1], 12, -389564586); c = md5_ff (c, d, a, b, x [i+ 2], 17, 606105819); B = MD5_FF (B, C, D, A, X [I+ 3], 22, -1044525330); a = md5_ff (a, b, c, d, x [i+ 4], 7, -176418897); d = md5_ff (d, a, b, c, x [i+ 5], 12, 1200080426); c = md5_ff (c, d, a, b, x [i+ 6], 17, -1473231341); b = md5_ff (b, c, d, a, x [i+ 7], 22, -45705983); a = md5_ff (a, b, c, d, x [i+ 8], 7, 1770035416); d = md5_ff (d, a, b, c, x [i+ 9], 12, -1958414417); c = md5_ff (c, d, a, b, x [i+10], 17, -42063); B = MD5_FF (B, C, D, A, X [I+11], 22, -1990404162); a = md5_ff (a, b, c, d, x [i+12], 7, 1804603682); d = md5_ff (d, a, b, c, x [i+13], 12, -40341101); c = md5_ff (c, d, a, b, x [i+14], 17, -1502002290); b = md5_ff (b, c, d, a, x [i+15], 22, 1236535329); a = md5_gg (a, b, c, d, x [i+ 1], 5, -165796510); d = md5_gg (d, a, b, c, x [i+ 6], 9, -1069501632); c = md5_gg (c, d, a, b, x [i+ 1], 14, 643717713); b = md5_gg (b, c, d, a, x [i+ 0], 20, -373897302); a = md5_gg (a, b, c, d, x [i+ 5], 5, -701558691); d = md5_gg (d, a, b, c, d, x [i+ 5], 5, -701558691); d = md5_gg (d, a, b, c, c, x [i+10], 9, 38016083); c = md5_gg (c, d, a, b, x [i+15], 14, -660478335); b = md5_gg (b, c, d, a, x [i+ 4], 20, -405537848); a = md5_gg (a, b, c, d, x [i+ 9], 5, 568446438); d = md5_gg (d, a, b, c, x [i+14], 9, -1019803690); c = md5_gg (c, d, a, b, x [i+ 3], 14, -187363961); b = md5_gg (b, c, d, a, x [i+ 8], 20, 1163531501); a = md5_gg (a, b, c, d, x [i+13], 5, -1444681467); d = md5_gg (d, a, b, c, x [i+ 2], 9, -51403784); c = md5_gg (c, d, a, b, x [i+ 7], 14, 1735328473); b = md5_gg (b, c, d, a, x [i+12], 20, -1926607734); a = md5_hh (a, b, c, d, x [i+ 5], 4, -378558); d = md5_gg (b, c, d, a, x [i+ 5], 4, -378558); d = md5_hh (d, a, b, c, x [i+ 8], 11, -2022574463); c = md5_hh (c, d, a, b, x [i+11], 16, 1839030562); b = md5_hh (b, c, d, a, x [i+14], 23, -35309556); a = md5_hh (a, b, c, d, x [i+ 1], 4, -1530992060); d = md5_hh (d, a, b, c, x [i+ 4], 11, 1272893353); c = md5_hh (c, d, a, b, x [i+ 7], 16, -155497632); b = md5_hh (b, c, d, a, x [i+10], 23, -1094730640); a = md5_hh (a, b, c, d, x [i+13], 4, 681279174); d = md5_hh (d, a, b, c, x [i+ 0], 11, -35853722222); c = md5_hh (c, d, a, b, x [i+ 3], 16, -722521979); b = md5_hh (b, c, d, a, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 0], 11, -358537222); c = md5_hh (c, d, a, b, x [i+ 3], 16, -722521979); b = md5_hh (b, c, d, a, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 9], 4, -640364487); d = md5_hh (d, a, b, c, x [i+12], 11, -421815835); c = md5_hh (c, d, a, b, x [i+15], 16, 530742520); b = md5_hh (b, c, d, a, x [i+ 2], 23, -995338651); a = md5_ii (a, b, c, d, x [i+ 0], 6, -198630844); d = md5_ii (d, a, b, c, x [i+ 7], 10, 1126891415); c = md5_ii (c, d, a, b, x [i+14], 15, -1416354905); b = md5_ii (b, c, d, a, x [i+ 5], 21, -57434055); a = md5_ii (a, b, c, d, x [i+12], 6, 1700485571); d = md5_ii (d, a, b, c, x [i+ 3], 10, -1894986606); c = md5_ii (c, d, a, b, x [i+10], 15, -1051523); b = md5_ii (b, c, d, a, x [i+ 1], 21, -2054922799); a = md5_ii (a, b, c, d, x [i+ 8], 6, 1873313359); d = md5_ii (d, a, b, c, x [i+15], 10, -30611744); c = md5_ii (c, d, a, b, x [i+ 6], 15, -1560198380); b = md5_ii (b, c, d, a, x [i+13], 21, 1309151649); a = md5_ii (a, b, c, d, x [i+ 4], 6, -145523070); d = md5_ii (d, a, b, c, x [i+11], 10, -1120210379); c = md5_ii (c, d, a, b, x [i+ 2], 15, 718787259); b = md5_ii (b, c, d, a, x [i+ 9], 21, -343485551); a = safe_add (a, olda); b = safe_add (b, oldb); c = safe_add (c, oldc); d = safe_add (d, oldd); } return array (a, b, c, d);}/ * ฟังก์ชั่นเหล่านี้ใช้การดำเนินการพื้นฐานสี่ขั้นตอนที่อัลกอริทึมใช้ */ฟังก์ชั่น md5_cmn (q, a, b, x, s, t) {return safe_add (bit_rol (safe_add (safe_add (safe_add (a, q), safe_add (x, t), s), b); & d), a, b, x, s, t);} ฟังก์ชั่น md5_gg (a, b, c, d, x, s, t) {return md5_cmn ((b & d) | (c & (~ d), a, b, x, s, t); b, x, s, t);} ฟังก์ชั่น md5_ii (a, b, c, d, x, s, t) {return md5_cmn (c ^ (b | (~ d)), a, b, x, s, t);}/ * * คำนวณ hmac-md5 if (bkey.length> 16) bkey = core_md5 (bkey, key.length * chrsz); HASH = CORE_MD5 (iPad.Cat.cat (str2binl (ข้อมูล)), 512 + data.length * chrsz); y) {var lsw = (x & 0xffff) + (y & 0xfff); >>> (32 - CNT));}/ * * แปลงสตริงเป็นอาร์เรย์ของคำเล็ก ๆ น้อย ๆ * ถ้า chrsz เป็น ascii, ตัวละคร> 255 มีการละเว้น hi -byte อย่างเงียบ ๆ bin [i >> 5] | = (str.charcodeat (i/chrsz) & หน้ากาก) << (i%32); chrsz) str += string.fromcharcode (bin [i >> 5] >>> (i % 32)) & หน้ากาก); "0123456789abcdef"; ((i%4) * 8)) & 0xf);} return str;}/ * * แปลงอาร์เรย์ของคำเล็ก ๆ น้อย ๆ เป็นสตริงพื้นฐาน -64 */ฟังก์ชั่น binl2b64 (binarray) {var tab = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 +/"; 0xff) << 16) | (((((i+1 >> 2] >> 8 * ((i+1)%4) & 0xff) << 8) | ((i+1) str += b64pad;sha1.js:
/ * * การใช้งาน JavaScript ของอัลกอริทึมแฮชที่ปลอดภัย, sha-1, ตามที่กำหนด * ใน FIPS Pub 180-1 * เวอร์ชัน 2.1-beta Copyright Paul Johnston 2000-2002. * ผู้มีส่วนร่วมอื่น ๆ : Greg Holt, Andrew Kepert, Ydnar, LostInet * สำหรับรายละเอียด * // * * ตัวแปรที่กำหนดค่าได้ คุณอาจต้องปรับแต่งสิ่งเหล่านี้ให้เข้ากันได้กับ * ฝั่งเซิร์ฟเวอร์ แต่ค่าเริ่มต้นทำงานในกรณีส่วนใหญ่ */var hexcase = 0; /* รูปแบบเอาต์พุต hex 0 - ตัวพิมพ์เล็ก; 1 - uppercase */var b64pad = ""; /* อักขระ Base-64 PAD "=" สำหรับการปฏิบัติตาม RFC ที่เข้มงวด */var chrsz = 8; /* บิตต่ออักขระอินพุต 8 - ASCII; 16 - Unicode * // * * นี่คือฟังก์ชั่นที่คุณต้องการเรียก * พวกเขาใช้อาร์กิวเมนต์สตริงและส่งคืน hex หรือ base -64 strings encoded */function hex_sha1 (s) {return binb2hex (core_sha1 (str2binb (s), s.length * chrsz); binb2b64 (core_sha1 (str2binb (s), s.length * chrsz));} ฟังก์ชั่น str_sha1 (s) {return binb2str (core_sha1 (str2binb (s), s.length * chrsz); data));} ฟังก์ชั่น b64_hmac_sha1 (คีย์, ข้อมูล) {return binb2b64 (core_hmac_sha1 (key, data));} function str_hmac_sha1 (key, data));} function str_hmac_sha1 (key, data) การทดสอบตัวเองอย่างง่ายเพื่อดูว่า VM ใช้งานได้หรือไม่ */ฟังก์ชั่น sha1_vm_test () {return hex_sha1 ("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; core_sha1 (x, len) { / * ภาคผนวก padding * / x [len >> 5] | = 0x80 << (24 - LEN % 32); x [((len + 64 >> 9) << 4) + 15] = len; var w = อาร์เรย์ (80); var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; var e = -1009589776; สำหรับ (var i = 0; i <x.length; i += 16) {var old = a; var oldb = b; var oldc = c; var เก่า = d; var เก่า = e; สำหรับ (var j = 0; j <80; j ++) {ถ้า (j <16) w [j] = x [i+j]; อื่น w [j] = rol (w [j - 3] ^ w [j - 8] ^ w [j - 14] ^ w [j - 16], 1); var t = safe_add (safe_add (rol (a, 5), sha1_ft (j, b, c, d)), safe_add (safe_add (e, w [j]), sha1_kt (j))); e = d; d = c; C = ROL (B, 30); b = a; a = t; } a = safe_add (a, olda); b = safe_add (b, oldb); c = safe_add (c, oldc); d = safe_add (d, เก่า); e = safe_add (e, เก่า); } return array (a, b, c, d, e);}/ * * ทำฟังก์ชั่นการรวมกันของ triplet ที่เหมาะสมสำหรับการทำซ้ำ */ฟังก์ชั่น sha1_ft (t, b, c, d) {ถ้า (t <20) กลับ (b & c) | ((~ b) & d); ถ้า (t <40) กลับ b ^ c ^ d; if (t <60) return (b & c) | (B&D) | (ซีดี); ส่งคืน b ^ c ^ d;}/ * * กำหนดค่าคงที่เพิ่มเติมที่เหมาะสมสำหรับการวนซ้ำปัจจุบัน */ฟังก์ชั่น sha1_kt (t) {return (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;}/ * * คำนวณ HMAC -SHA1 ของคีย์และข้อมูลบางอย่าง */ฟังก์ชัน CORE_HMAC_SHA1 (คีย์, ข้อมูล) {var bkey = str2binb (คีย์); if (bkey.length> 16) bkey = core_sha1 (bkey, key.length * chrsz); var iPad = array (16), opad = array (16); สำหรับ (var i = 0; i <16; i ++) {iPad [i] = bkey [i] ^ 0x36363636; opad [i] = bkey [i] ^ 0x5c5c5c5c; } var hash = core_sha1 (ipad.concat (str2binb (data)), 512 + data.length * chrsz); return core_sha1 (opad.concat (แฮช), 512 + 160);}/ * * เพิ่มจำนวนเต็ม, ห่อที่ 2^32 สิ่งนี้ใช้การดำเนินการ 16 บิตภายใน * เพื่อแก้ไขข้อบกพร่องในล่าม JS บางตัว */ฟังก์ชั่น safe_add (x, y) {var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (LSW & 0xFFFF);}/ * * Bitwise หมุนหมายเลข 32 บิตไปทางซ้าย */ฟังก์ชั่น rol (num, cnt) {return (num << cnt) | (num >>> (32-cnt));}/ * * แปลงสตริง 8 บิตหรือ 16 บิตเป็นอาร์เรย์ของคำใหญ่-เอดิน * ในฟังก์ชั่น 8 บิตอักขระ> 255 มีการละเว้น hi-byte อย่างเงียบ ๆ */ฟังก์ชั่น str2binb (str) {var bin = array (); var mask = (1 << chrsz) - 1; สำหรับ (var i = 0; i <str.length * chrsz; i += chrsz) bin [i >> 5] | = (str.charcodeat (i / chrsz) & หน้ากาก) << (24 - i % 32); return bin;}/ * * แปลงอาร์เรย์ของคำใหญ่-เอดินเป็นสตริง */ฟังก์ชัน binb2str (bin) {var str = ""; var mask = (1 << chrsz) - 1; สำหรับ (var i = 0; i <bin.length * 32; i += chrsz) str += string.fromcharcode ((bin [i >> 5] >>> (24 - i % 32)) & หน้ากาก); return str;}/ * * แปลงอาร์เรย์ของคำใหญ่-เอดินเป็นสตริง hex */ฟังก์ชั่น binb2hex (binarray) {var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF"; var str = ""; สำหรับ (var i = 0; i <binarray.length * 4; i ++) {str += hex_tab.charat ((binarray [i >> 2] >> ((3 - i % 4) * 8 +4)) & 0xf) +hex_tab.charat ((binarray [i >> 2] } return str;}/ * * แปลงอาร์เรย์ของคำใหญ่-เอดินเป็น base-64 สตริง */ฟังก์ชั่น binb2b64 (binarray) {var tab = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy0123456789 var str = ""; สำหรับ (var i = 0; i <binary.length * 4; i += 3) {var triplet = (((binarray [i >> 2] >> 8 * (3 - i % 4)) & 0xff) << 16) | (((binarray [i + 1 >> 2] >> 8 * (3 - (i + 1) % 4)) & 0xff) << 8) | ((binarray [i + 2 >> 2] >> 8 * (3 - (i + 1) % 4)) & 0xff) << 8) | ((binarray [i + 2 >> 2] >> 8 * (3 - (i + 2) % 4)) & 0xff); สำหรับ (var j = 0; j <4; j ++) {ถ้า (i * 8 +j * 6> binary.length * 32) str += b64pad; else str += tab.charat ((triplet >> 6 * (3 - j)) & 0x3f); }} return str;}เพื่อนที่มีความสนใจในการเข้ารหัส JavaScript สามารถอ้างถึงเครื่องมือออนไลน์ของเว็บไซต์นี้ :
เครื่องมือเข้ารหัสออนไลน์ MD5
เครื่องมือการเข้ารหัส/ถอดรหัส
เครื่องมือเข้ารหัสออนไลน์ SHA1
Thunder, Express, Tornado URL การเข้ารหัส/ถอดรหัสเครื่องมือ
การตรวจจับความปลอดภัยของรหัสผ่านออนไลน์
เครื่องกำเนิดรหัสผ่านที่มีความแข็งแรงสูง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ JavaScript โปรดตรวจสอบหัวข้อของไซต์นี้: "สรุปทักษะการเข้ารหัสและการถอดรหัส JavaScript", "บทสรุปของการสลับเอฟเฟกต์พิเศษและทักษะพิเศษ", "สรุปทักษะการค้นหา Javascript ทักษะอัลกอริทึม "," บทสรุปของอัลกอริทึมและทักษะการสำรวจ JavaScript Traversal "และ" สรุปการใช้งานการดำเนินการทางคณิตศาสตร์ JavaScript "
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม JavaScript ของทุกคน