为什么charAt()和charCodeAt()被称为安全?

时间:2015-12-16 06:53:01

标签: javascript string char charat

我正在学习javascript字符串方法here

提取字符串字符部分下,它说:

有2种安全方法用于提取字符串字符:

  • charAt(position)
  • charCodeAt(position)

这里的问题是:

  • 为什么这些方法被称为安全
  • 这些方法有哪些保护措施?

1 个答案:

答案 0 :(得分:2)

有两种方法可以从字符串中访问字符。

// Bracket Notation
"Test String1"[6]

// Real Implementation
"Test String1".charAt(6)

出于这些原因(Source)使用括号是个坏主意:

  

此符号在IE7中不起作用。   第一个代码段将返回   在IE7中未定义。如果你碰巧使用   所有字符串的括号表示法   你的代码,你想迁移   到.charAt(pos),这是一个真正的痛苦:   在您的代码中使用括号   并且没有简单的方法来检测是否   这是一个字符串或一个   阵列/对象。

     

您无法使用此表示法设置角色。由于没有警告   任何一种,这真的令人困惑   令人沮丧的。如果你正在使用   .charAt(pos)功能,你不会   我很想做到这一点。

此外,它可能会在edge cases

中产生意外结果



console.log('hello' [NaN]) // undefined
console.log('hello'.charAt(NaN)) // 'h'

console.log('hello' [true]) //undefined
console.log('hello'.charAt(true)) // 'e'




基本上,它是一种在所有浏览器中未完全实现的快捷符号。

注意,您无法使用任何一种方法编写字符。但是,使用.charAt()函数可以更容易理解该功能,在大多数语言中,这是一个只读函数。

因此,为了兼容性目的,.charAt被认为是安全的。

Source

速度测试:http://jsperf.com/string-charat-vs-bracket-notation

Testing in Chrome 47.0.2526.80 on Mac OS X 10.10.4
Test    Ops/sec

String charAt
testCharAt("cat", 1);
117,553,733
±1.25%
fastest

String bracket notation
testBracketNotation("cat", 1);
118,251,955
±1.56%
fastest