Ble*_*der 233 javascript string
有什么理由我应该使用string.charAt(x)而不是括号表示法string[x]吗?
Bri*_*ter 228
括号表示法现在适用于所有主流浏览器,IE7及更低版本除外.
// Bracket Notation
"Test String1"[6]
// charAt Implementation
"Test String1".charAt(6)
Run Code Online (Sandbox Code Playgroud)
由于这些原因,使用括号过去是个坏主意(来源):
这种表示法在IE7中不起作用. 第一个代码片段将在IE7中返回undefined.如果您碰巧在代码中使用括号表示法并且想要迁移到
.charAt(pos),那么这真的很痛苦:在您的代码中使用括号,并且没有简单的方法来检测字符串或数组是否为/宾语.您无法使用此表示法设置角色.由于没有任何形式的警告,这真的令人困惑和令人沮丧.如果您正在使用该
.charAt(pos)功能,那么您就不会想要这样做.
Mat*_*all 88
来自MDN:
有两种方法可以访问字符串中的单个字符.第一个是
charAt方法,ECMAScript 3的一部分:Run Code Online (Sandbox Code Playgroud)return 'cat'.charAt(1); // returns "a"另一种方法是将字符串视为类似于数组的对象,其中每个单独的字符对应于数字索引.自IE第一版以来,大多数浏览器都支持此功能.它在ECMAScript 5中标准化:
Run Code Online (Sandbox Code Playgroud)return 'cat'[1]; // returns "a"第二种方式需要ECMAScript 5支持(在某些旧版浏览器中不支持).
在这两种情况下,尝试更改单个字符都不起作用,因为字符串是不可变的,即它们的属性既不是"可写"也不是"可配置".
str.charAt(i) 如果需要IE6/IE7兼容性,从兼容性角度来看会更好.str[i] 更现代,适用于IE8 +和所有其他浏览器(所有Edge/Firefox/Chrome,Safari 2 +,所有iOS/Android).Mar*_*rkG 72
它们可以在边缘情况下给出不同的结果.
'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'
'hello'[true] //undefined
'hello'.charAt(true) // 'e'
Run Code Online (Sandbox Code Playgroud)
charAt函数取决于索引如何转换为规范中的数字.
Don*_*uck 18
当您尝试访问超出范围或不是整数的索引时,会有所不同。
string[x]返回if 中x第 th 位置的字符是 0 和 之间的整数,否则返回。stringxstring.length-1undefined
string.charAt(x)转换x使用过程中的整数解释这里(其基本上舍x下来,如果x是一个非整数,并返回0,如果parseInt(x)是NaN),然后,如果此整数为0之间,并在返回该位置的字符string.length-1,并且返回一个空字符串,否则.
这里有些例子:
"Hello"[313] //undefined
"Hello".charAt(313) //"", 313 is out of bounds
"Hello"[3.14] //undefined
"Hello".charAt(3.14) //'l', rounds 3.14 down to 3
"Hello"[true] //undefined
"Hello".charAt(true) //'e', converts true to the integer 1
"Hello"["World"] //undefined
"Hello".charAt("World") //'H', "World" evaluates to NaN, which gets converted to 0
"Hello"[Infinity] //undefined
"Hello".charAt(Infinity) //"", Infinity is out of bounds
Run Code Online (Sandbox Code Playgroud)
另一个区别是分配给string[x]什么都不做(这可能会令人困惑)而分配给string.charAt(x)是一个错误(如预期的那样):
var str = "Hello";
str[0] = 'Y';
console.log(str); //Still "Hello", the above assignment did nothing
str.charAt(0) = 'Y'; //Error, invalid left-hand side in assignment
Run Code Online (Sandbox Code Playgroud)
分配给string[x]不起作用的原因是因为Javascript 字符串是不可变的。
Cha*_*thJ 11
String.charAt()是原始标准,适用于所有浏览器.在IE 8+和其他浏览器中,您可以使用括号表示法来访问字符,但IE 7及以下版本不支持它.
如果有人真的想在IE 7中使用括号表示法,那么将字符串转换为数组是明智的str.split(''),然后将其用作数组,与任何浏览器兼容.
var testString = "Hello";
var charArr = testString.split("");
charArr[1]; // "e"
Run Code Online (Sandbox Code Playgroud)
测试字符串索引访问器与charAt()方法时的结果非常有趣.似乎Chrome是唯一喜欢charAt更多的浏览器.