Javascript映射数组'fromCharCode'(字符)
Javascript map array with 'fromCharCode' (character length)
以下是来自Chrome控制台的交互式会话:
myarray
//-> [67, 65, 84]
String.fromCharCode(67)
//-> "C"
String.fromCharCode(67).length
//-> 1
String.fromCharCode(myarray[0])
//-> "C"
String.fromCharCode(myarray[0]).length
//-> 1
myarray.map(String.fromCharCode)
//-> ["C", "A", "T"]
myarray.map(String.fromCharCode)[0]
//-> "C"
myarray.map(String.fromCharCode)[0].length
//-> 3
谁能解释为什么最后一个操作返回3
?
非常有趣的问题。
和答案是:你得到3
的原因是,fromCharCode
返回一个字符串与一样多的字符,因为在调用它的参数,和map
调用回调函数有三个参数:元素的值,元素的索引,和对象被遍历。因此,一个包含三个字符的字符串,但不是三个易于显示的字符。棘手。
具体来说,第一个参数是"C"
;第二个参数的字符0(因为我们正在看[0]
;对于[1]
等,它将是1),以及基于将数组强制转换为数字的字符(使用fromCharCode
使用的任何规则;Šime Vidas在下面说,它将对它执行ToUInt16
,这将导致0
)。
例如:
> String.fromCharCode(67, 0, [67, 65, 84]).length
3
…就像map
的调用。
:
> String.fromCharCode(67, 0, [67, 65, 84]).length
3
> String.fromCharCode(67, 0, null).length
3
> String.fromCharCode(67, 0, 0, 0, 0, 0, 0).length
7
如果我们确保一次只传递一个参数,我们不会看到意外的效果,所以当直接使用它时,我认为大多数人都不会期望得到的结果:
> [67, 65, 84].map(String.fromCharCode)
["C", "A", "T"]
> [67, 65, 84].map(String.fromCharCode)[0]
"C"
> [67, 65, 84].map(String.fromCharCode)[0].length
3
…这给了我们一个更容易理解的结果:
> [67, 65, 84].map(function(value) { return String.fromCharCode(value); })
["C", "A", "T"]
> [67, 65, 84].map(function(value) { return String.fromCharCode(value); })[0]
"C"
> [67, 65, 84].map(function(value) { return String.fromCharCode(value); })[0].length
1
我无法详细阐述T.J. Crowder的答案,但我可以为这个特定问题提供一个解决方案。
而不是
myarray.map(String.fromCharCode);
使用String.fromCharCode.apply(String, myarray).split("");
除了返回预期结果的好处之外,这也可以在不依赖ECMAScript第5版方法Array.prototype.map
的情况下工作,从而使其更具兼容性。
遇到了同样的问题,发现了这个线程。如果你正在使用ES6,我建议这样做:
arr.map((c)=>String.fromCharCode(c));
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 允许在文本框中使用某些字符
- 根据页面的位置突出显示文本中的字符
- 元素的内容必须由格式正确的字符数据或标记组成
- 如何将字符串拆分为字符,但在javascript中保留空格
- 使用Google Maps API向标记添加多个字符
- 处理JSON字符串会导致JavaScript错误
- 单元格的工具提示或标题不显示超过2000个字符
- javascript替换换行符和特殊字符
- string.replace(fromCharCode() , '') 不能替换字符
- javascript中特殊字符的String.fromCharCode问题
- Javascript.withs.fromCharCode字母等价于特殊字符的charcode
- JavaScript + Chrome: String.fromCharCode给出多余的字符
- Javascript映射数组'fromCharCode'(字符)