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 为有序的字母组合。
要解决这个问题,就必须解决以下两个问题:
- item 对象 key 名的动态指定
- key 值的有序生成
key 名的动态指定:
解决每一个 item 对象 key 名,动态指定,两种方法:
- 使用 eval() 函数解决
eval()
函数会将传入的字符串当做 JavaScript 代码进行执行【PS:因为该函数可以将字符串解析为JS代码执行,所以使用时,一定要考虑安全问题,细节不在这里说明】。详情点击链接参考MDN,下面是一个小 Demo
var person = {}
var key = 'name'
eval('person.' + key + "=" + "'江小白'"); // 内部字符串被拼接之后,作为 JS 代码执行,从而达到动态指定 key 值的目的
console.dir(person)
- 使用 属性访问器 解决(PS:即 '[key]' )
有关属性访问器,详情点击上面链接获取,这里直接给出属性访问器 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 中不能直接这样操作,只能借助对应函数实现,说实话我只感觉这些函数肯定存在,但却从未用过,看来还是代码撸的太少了。其实需要的函数就是:fromCharCode、fromCodePoint、charCodeAt、codePointAt
fromCharCode、fromCodePoint 负责将 ascii 码对应的数字转为 对应的字符
charCodeAt、codePointAt 负责将 对应的字符 转为对应的数字 ascii 码值
两者的使用很简单,可以点击链接参看 MDN 的详细文档,这里之列出来简单的使用 Demo
console.log("ascii to char:" + String.fromCodePoint(65)) // ascii to char: A
console.log("ascii to char:" + String.fromCharCode(65)) // ascii to char: Aconsole.log("char to ascii:" + 'A'.charCodeAt(0)) // char to ascii: 65
console.log("char to ascii:" + 'A'.codePointAt(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】相关推荐
- c#字符型转化为asc_C#中使用强制类型实现字符串和ASCII码之间的转换
C#貌似没有专门用于ASCII码转字符或字符转ASCII码的系统函数,所以小编这里就借用一下强制类型转换来实现ASCII码与字符之间的互转. 所谓的ASCII码,即American Standard ...
- javascript十六进制数字和ASCII字符之间转换
var hex="0x29";//十六进制 var charValue = String.fromCharCode(hex);//生成Unicode字符 var charCode ...
- 字母与ASCII码之间的转换
1.先解释下两个名词,主要从百度百科中查询得到: ASCII (American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字 ...
- Bash Shell中16进制数字和ASCII字符相互转换
Bash Shell中ASCII值和字符之间的转换 1.数值转换为ASCII字符 方法一: i=97echo $i | awk '{printf("%c", $1)}' 方法二: ...
- 如何在 JavaScript 中的字符串的字符之间添加空格
在今天的文章中,我们将学习如何轻松地在 JavaScript 中的字符串字符之间包含空格. 1.String split() 和 Split join() 方法 要在字符串的字符之间添加空格,请对字符 ...
- c++ 字符类型总结区别wchar_t,char,WCHAR(转)
1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wc ...
- C++字符类型总结区别wchar_t,char,WCHAR
转至:http://www.360doc.com/content/12/0807/01/9290626_228750141.shtml 1.区别wchar_t,char,WCHAR ANSI:即 ch ...
- c语言宽字符与wchar,浅谈c++ 字符类型总结区别wchar_t,char,WCHAR
1.区别wchar_t,char,WCHAR ANSI:即 char,可用字符串处理函数:strcat( ),strcpy( ), strlen( )等以str打头的函数. UNICODE:wchar ...
- sql查询非ascii字符_SQL替换:如何在SQL Server中替换ASCII特殊字符
sql查询非ascii字符 One of the important steps in an ETL process involves the transformation of source dat ...
最新文章
- 基于 Dash Bio 的生物信息学数据可视化
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
- 《研磨设计模式》chap20 享元模式 Flyweight (4)总结
- Ubuntu 16.04安装Nginx
- spring整合struts2时作用域scope解析
- java https安全传输
- 软件测试Homework03
- 【037】Excel 中遍历修改文件(VBA)
- Vue 引入 zepto
- 华为狼性文化遭质疑,那我们当个佛系程序员可好?
- usb大容量存储设备 被禁用 无法启动,彻底卸载大势至 【手贱,安装大势至USB接口软件后无法使用U盘】
- 山东大学——国际结算方式
- 面试题-实现数组map方法
- 别人写的微信小程序,收藏借鉴!
- 怎么看电脑网卡是否支持5g频段
- InnoDB中的页合并与分裂
- Linux查看末尾几行的命令
- 货币信息高于货币价值而存在
- LLC谐振半桥电路分析与设计(1)
- 常见的测试用例设计方法7---因果图法
热门文章
- 二十九、Java的异常处理
- AAAI 2021 | 基于动态混合关系网络的对话式语义解析方法
- 基于多域连接卷积神经网络的精神分裂症脑功能网络分类
- HDU 1556 前缀和 树状数组 线段树
- Pinyin4j中文字符和拼音之间的转换
- 零基础带你快速入门Ribbon技术(浅显易懂、小白都能看懂)
- Docker——IDEA部署Spring Boot项目到远程Docker解决方案
- Docker——基于HubServing部署全套PaddleOCR Restful API服务(CPU版本)
- JAVA——基于HttpClient的正方教务系统[1999-2020]模拟登录|模拟退出|课程查询|成绩查询|考试查询基本解决方案
- 粗题⼈不考你没学过的算法