[javascript] string.charAt (x) 또는 string [x]?

string.charAt(x)대괄호 표기법 대신 사용해야하는 이유가 string[x]있습니까?



답변

대괄호 표기법은 이제 IE7 이하를 제외한 모든 주요 브라우저에서 작동합니다.

// Bracket Notation
"Test String1"[6]

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

다음과 같은 이유로 대괄호를 사용하는 것은 좋지 않은 생각이었습니다 ( Source ).

이 표기법은 IE7에서 작동하지 않습니다.
첫 번째 코드 스 니펫은 IE7에서 정의되지 않은 상태로 반환됩니다. 코드 전체에서 문자열에 대괄호 표기법을 사용하고 마이그레이션하려는 .charAt(pos)경우 실제로 고통입니다. 대괄호는 코드 전체에서 사용되며 문자열 또는 배열에 대한 것인지 여부를 쉽게 찾을 수있는 방법은 없습니다. 목적.

이 표기법을 사용하여 문자를 설정할 수 없습니다. 어떤 종류의 경고도 없기 때문에 이것은 실제로 혼란스럽고 실망 스럽습니다. 이 .charAt(pos)기능 을 사용하고 있다면
그 유혹을받지 않았을 것입니다.


답변

에서 MDN :

문자열에서 개별 문자에 액세스하는 두 가지 방법이 있습니다. 첫 번째는 charAtECMAScript 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 vs 인덱스 1

ChartAt와 인덱스 2

ChartAt vs 인덱스 3


답변

범위를 벗어나거나 정수가 아닌 인덱스에 액세스하려고 할 때 차이가 있습니다.

string[x]if 가 0과 사이의 정수인 경우 xth 위치 의 문자를 반환 하고 , 그렇지 않으면를 반환 합니다.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

또 다른 차이점은 할당하는 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 문자열이 변경 불가능 하기 때문 입니다.


답변