js的toLowerCase 是如何實現的?
二、ASCII編碼
查閱資料后我知道了,計算機所有的字符都基於ASCII編碼,下面是ASCII 基礎編碼的映射表:
此時,我們不難發現,A-Z 和 a-z 的 ASCII 編碼的十進制剛好相差32,
於是我們的實現思路就是將大寫的轉成十進制編碼,再轉換成小寫字母的十進制編碼,最后得到小寫字母。js有兩個函數能實現這兩種轉換:
String.fromCharCode(num1, ..., numN) //把編碼轉換成對應的字符串 str.charCodeAt(index) //獲取字符串的編碼
下面,我們就動手實現。
三、代碼實現:
- toLowerCase():
1 /** 2 * @param {string} str 3 * @return {string} 4 */ 5 var toLowerCase = function(str) { 6 // ASCII 編碼大寫小寫相差32 7 let arr = str.split(''); 8 let AscCode; 9 let maxCode = 'Z'.charCodeAt(); 10 let minCode = 'A'.charCodeAt(); 11 for (let i = 0; i < arr.length; i++) { 12 // 轉換為ASCII碼 13 AscCode = arr[i].charCodeAt(); 14 // 大寫字母,轉小寫 15 if (maxCode >= AscCode && minCode <= AscCode) { 16 arr[i] = String.fromCharCode(AscCode+32); 17 } 18 } 19 return arr.join(''); 20 };
- toUpperCase():
1 /** 2 * @param {string} str 3 * @return {string} 4 */ 5 var toUpperCase = function(str) { 6 // ASCII 編碼大寫小寫相差32 7 let arr = str.split(''); 8 let AscCode; 9 let maxCode = 'z'.charCodeAt(); 10 let minCode = 'a'.charCodeAt(); 11 for (let i = 0; i < arr.length; i++) { 12 // 轉換為ASCII碼 13 AscCode = arr[i].charCodeAt(); 14 // 大寫字母,轉大寫 15 if (maxCode >= AscCode && minCode <= AscCode) { 16 arr[i] = String.fromCharCode(AscCode-32); 17 } 18 } 19 return arr.join(''); 20 };