javascript
JavaScript 进行数值与对应的 ASCII 字符之间的转换【fromCharCode、fromCodePoint、charCodeAt、codePointAt】
引言:
今天遇到一個需求,需要動態創建一個 JS 對象數組,對象中的 key 值并不都是一樣的(準確說是一個有序的字母),具體如下:
var options = [{"A":"選項A XXXX"},{"B":"選項B XXXX"},{"C":"選項C XXXX"},{"D":"選項D XXXX"}, ]第一眼感覺很簡單,但是仔細看的話,就會發現與我們常見的創建一個對象,差別還是很大的。因為通常情況下我們創建的對象,key 是硬編碼的,如下:
var person = {}; person.name = "江小白"; // 硬編碼指定 key 為 name再看我們的需求,每一個 item 對象是一個結構類似,但是 key 值并不完全一樣的。key 為有序的字母組合。
要解決這個問題,就必須解決以下兩個問題:
key 名的動態指定:
解決每一個 item 對象 key 名,動態指定,兩種方法:
? eval()?函數會將傳入的字符串當做 JavaScript 代碼進行執行【PS:因為該函數可以將字符串解析為JS代碼執行,所以使用時,一定要考慮安全問題,細節不在這里說明】。詳情點擊鏈接參考MDN,下面是一個小 Demo
var person = {} var key = 'name' eval('person.' + key + "=" + "'江小白'"); // 內部字符串被拼接之后,作為 JS 代碼執行,從而達到動態指定 key 值的目的 console.dir(person)? ? ?有關屬性訪問器,詳情點擊上面鏈接獲取,這里直接給出屬性訪問器?Demo
var person = {} var key = 'name' person[key] = "公子小白" // 使用 JS 屬性選擇器動態指定 key console.dir(person)key 值的有序生成:
我們知道這種有序的 key(A、B、C、D......),生成的時候最好使用 ASCII 字符的編碼特點來實現,要實現 ASCII 與對應的字符映射(準確數叫做編碼規則),其實在 C/C++ 這種語言下很簡單,因為可以直接對 char 進行算數運算 或者 直接強制類型轉換就可以將 int 轉換為 char。
char c = 'A';// int n = (int)c;// char b = (char)n;printf("n = %d\n", n); // n = 65printf("b = %c\n", b); // b = A但是很不幸 JS 中不能直接這樣操作,只能借助對應函數實現,說實話我只感覺這些函數肯定存在,但卻從未用過,看來還是代碼擼的太少了。其實需要的函數就是:from?Char?Code、from?Code?Point、charCodeAt、code?PointAt
from?Char?Code、from?Code?Point 負責將 ascii 碼對應的數字轉為 對應的字符
charCodeAt、code?PointAt?負責將 對應的字符 轉為對應的數字 ascii 碼值
兩者的使用很簡單,可以點擊鏈接參看 MDN 的詳細文檔,這里之列出來簡單的使用 Demo
console.log("ascii to char:" + String.fromCodePoint(65)) // ascii to char: A console.log("ascii to char:" + String.from?Char?Code(65)) // ascii to char: Aconsole.log("char to ascii:" + 'A'.charCodeAt(0)) // char to ascii: 65 console.log("char to ascii:" + 'A'.code?PointAt(0)) // char to ascii: 65綜合上面實現需求的最終 Demo 如下:
var char = 'A'; console.log("ascii to char:" + String.fromCodePoint(65)) // ascii to char: A console.log("char to ascii:" + 'A'.charCodeAt(0)) // char to ascii: 65var options = []for(index = 0 ; index< 4; index++){var option = {}option[char] = "選項" + char + "XXX";options.push(option)char = String.fromCharCode(char.charCodeAt(0) + 1); } console.log(options)本文并沒有技術含量,但對于初學者可能還是有一定幫助,這里主要是做個記錄方便日后查看。
總結
以上是生活随笔為你收集整理的JavaScript 进行数值与对应的 ASCII 字符之间的转换【fromCharCode、fromCodePoint、charCodeAt、codePointAt】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决 vue 项目一直出现 sockjs
- 下一篇: java 日期 运算