是string.charAt(x)还是string [x]?

2020/10/10 05:41 · javascript ·  · 0评论

有什么理由string.charAt(x)代替括号表示法string[x]吗?

现在,括号表示法可在所有主要浏览器上使用,但IE7及以下版本除外。

// Bracket Notation
"Test String1"[6]

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

出于以下原因,使用方括号曾经是个坏主意(Source):

此表示法在IE7中不起作用。
第一个代码段将在IE7中返回undefined。
如果您碰巧在代码中对字符串使用了括号表示法,并且想要迁移到
.charAt(pos),这是一个真正的痛苦:在代码中都使用了括号,并且没有简单的方法来检测是针对字符串还是数组/。目的。

您不能使用此符号设置字符。由于没有任何警告,这确实令人困惑和沮丧。如果您正在使用该
.charAt(pos)功能,则不会想这么做。

MDN

有两种方法可以访问字符串中的单个字符。第一种是charAt方法,是ECMAScript 3的一部分:

return 'cat'.charAt(1); // returns "a"

另一种方法是将字符串当作数组对象,其中每个单独的字符都对应一个数字索引。自IE以来,大多数浏览器自其第一个版本以来都支持该功能。它在ECMAScript 5中标准化:

return 'cat'[1]; // returns "a"

第二种方法需要ECMAScript 5支持(某些较旧的浏览器不支持)。

在这两种情况下,尝试更改单个字符均不起作用,因为字符串是不可变的,即字符串的属性既不是“可写的”也不是“可配置的”。

  • str.charAt(i) 如果需要IE6 / IE7兼容性,则从兼容性角度来看更好。
  • str[i] 更加现代,可在IE8 +和所有其他浏览器(所有Edge / Firefox / Chrome,Safari 2+,所有iOS / Android)中使用。

在极端情况下,它们可以给出不同的结果。

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

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

charAt函数取决于如何将索引转换为规范中的数字

String.charAt()是原始标准,可在所有浏览器中使用。在IE 8+和其他浏览器中,您可以使用方括号表示法来访问字符,但IE 7及更低版本不支持。

如果有人真的想在IE 7中使用括号表示法,明智的做法是使用将该字符串转换为数组str.split(''),然后将其用作与任何浏览器兼容的数组。

var testString = "Hello"; 
var charArr = testString.split("");
charArr[1]; // "e"

当测试字符串索引访问器与charAt()方法时,结果非常有趣似乎Chrome是唯一喜欢它的浏览器charAt

CharAt与索引1

ChartAt与索引2

ChartAt与索引3

当您尝试访问超出范围或不是整数的索引时,会有所不同。

string[x]如果if是介于0和之间的整数xstring返回第th个位置的字符,否则返回xstring.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

另一个区别是,分配给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

之所以string[x]无法分配,是因为Javascript字符串是不可变的

本文地址:http://javascript.askforanswer.com/shistring-charatxhuanshistring-x.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!