왜 ('b'+'a'+'a'+'a'+'a')의 결과가 Lower Case()의 '바나나'로 되어 있습니까?
내가 자바스크립트를 연습하고 있을 때 내 친구 중 한 명이 이 자바스크립트 코드를 발견했다.
document.write(('b' + 'a' + + 'a' + 'a').toLowerCase());
위의 코드가 응답합니다."banana"
왜 그런지 설명해줄 사람?
+'a'
로 해결하다.NaN
('숫자 아님')는 문자열이 숫자에 강제로 입력되는 반면 문자는a
를 숫자로 구문 분석할 수 없습니다.
document.write(+'a');
banana
.
추가 중NaN
로."ba"
회전하다NaN
현악기 속으로"NaN"
유형 변환으로 인해,baNaN
그리고 또...a
배후에, 주다baNaNa
.
사이의 간격+ +
첫 번째 문자열 연결과 두 번째 문자열 연결은 단항 플러스(즉, "긍정") 연산자로 만듭니다.를 사용해도 같은 결과가 됩니다.'ba'+(+'a')+'a'
, 해결 방법:'ba'+NaN+'a'
에 상당합니다.'ba'+'NaN'+'a'
활자 저글링 때문에.
document.write('ba'+(+'a')+'a');
'b' + 'a' + + 'a' + 'a'
...는 다음과 같이 평가됩니다.
'b' + 'a' + (+'a') + 'a'
('Operator precedence' 참조)
(+'a')
변환 시도'a'
단항 더하기 연산자를 사용하여 숫자로 변환합니다.왜냐면'a'
는 숫자가 아닙니다.결과는 다음과 같습니다("Not a Number") :
'b' + 'a' + NaN + 'a'
비록 ~일지라도NaN
는 "Not a Number"의 약자로, 여전히 숫자 유형입니다. 문자열에 추가하면 다른 숫자와 마찬가지로 연결됩니다.
'b' + 'a' + NaN + 'a' => 'baNaNa'
마지막으로 소문자를 사용합니다.
'baNaNa'.toLowerCase() => 'banana'
('b' + 'a' + + 'a' + 'a').toLowerCase()
알기 쉽게 하기 위해서, 이것을 2개의 스텝으로 나누어 봅시다.먼저 괄호로 묶인 식의 값을 얻은 다음,toLowerCase()
그 결과에 따라 기능합니다.
순서 1
'b' + 'a' + + 'a' + 'a'
L-R에는 다음이 있습니다.
'b' + 'a'
ba를 반환합니다.이것은 일반 연결입니다.ba + + 'a'
ba와 연결시키려는 시도+ 'a'
단, 단항 연산자가+
오퍼랜드를 숫자로 변환하려고 하면 NaN 값이 반환되고 원래 ba와 연결되면 문자열로 변환되므로 baN이 발생합니다.baNaN
+ 'a'는 baNa를 반환합니다.다시 말씀드리지만, 이것은 정기적인 연결입니다.
이 단계에서 1단계의 결과는 baNaNa입니다.
순서 2
신청중.toLowerCase()
스텝 1에서 반환된 값에 대해 다음 정보를 제공합니다.
바나나
JavaScript에는 체크할 수 있는 유사한 말장난이 많이 있습니다.
단지 + 연산자 때문입니다.
우리는 그것을 통해 더 많은 지식을 얻을 수 있다.
=> ( ('b') + ('a') + (++) + ('a') + ('a'))
=> ( ('b') + ('a') + (+) + ('a') + ('a')) // Here + + convert it to +operator
Which later on try to convert next character to the number.
예를들면
const string = '10';
문자열은 다음 두 가지 방법으로 숫자로 변환할 수 있습니다.
- 숫자(문자열);
- +문자열;
원래 쿼리로 돌아갑니다.여기서 다음 문자('a')를 숫자로 변환하려고 하는데 갑자기 오류 NaN이 발생했습니다.
( ('b') + ('a') + (+'a') + ('a'))
( ('b') + ('a') + NaN + ('a'))
그러나 이전 문자가 문자열에 있었기 때문에 문자열로 취급됩니다.그래서 그렇게 될 거야
( ('b') + ('a') + 'NaN' + ('a'))
마지막으로 Lower Case()로 변환되므로 바나나가 됩니다.
그 옆에 번호를 붙이면 결과가 바뀝니다.
( 'b' + 'a' + + '1' + 'a' )
'ba1a'일 것이다.
const example1 = ('b' + 'a' + + 'a' + 'a').toLowerCase(); // 'banana'
const example2 = ('b' + 'a' + + '1' + 'a').toLowerCase(); // 'ba1a'
console.log(example1);
console.log(example2);
이 코드 행은 식을 평가한 후 반환된 값에 따라 메서드를 호출합니다.
.('b' + 'a' + + 'a' + 'a')
는 문자열 리터럴과 덧셈 연산자로만 구성됩니다.
실행되는 암묵적인 액션은 문자열 상의 To Number 호출입니다.
- 문자열 유형에 적용되는 ToNumber "Strings에 적용되는 ToNumber는 입력 문자열에 문법을 적용합니다.문법이 StringNumericLiteral의 확장으로 String을 해석할 수 없는 경우 ToNumber의 결과는 NaN입니다.
인터프리터에는 표현식을 왼쪽 및 오른쪽 표현식의 컴포넌트로 분할하여 해석하는 방법에 대한 규칙이 있습니다.
1: 서 1:'b' + 'a'
식: 쪽쪽쪽:'b'
값: ' 쪽 : 'b'
연산자: + (식측 중 하나가 문자열이므로 문자열 연결)
바른른 right right:'a'
값: ' 바 ' : 'a'
★★★★★'ba'
2: 서 2 2:'ba' + + 'a'
식: 쪽쪽쪽:'ba'
값: ' 쪽 : 'ba'
연산자: + (식측 중 하나가 문자열이므로 문자열 연결)
바른른 right right:+ 'a'
기호에서 .) ('a'는 플러스 기호에서 기호로 계산됩니다.) ('a'는 플러스 기호로 계산됩니다.) (''는기호로 됩니다.) 마이너스 기호도 여기서 음수를 나타내므로 NaN이 됩니다.)
오른쪽 값 : NaN ('ToString'으로 변경)
결과: 'baNaN'
3: § 3:'baNaN' + 'a'
식: 쪽쪽쪽:'baNaN'
값: ' 쪽 ': 'baNaN'
연산자: + (식측 중 하나가 문자열이므로 문자열 연결)
바른른 right right:'a'
값: ' 바 ' : 'a'
결과: 'baNaNa'
그 후 그룹식이 평가되고 to Lower Case가 호출되어 바나나가 남습니다.
+를 사용하면 JavaScript에서 모든 값이 숫자로 변환됩니다!
그래서...
할 은 '어느 정도 알고 배울 수 있다'입니다.+
JavaScript의 어떤 값보다 먼저 해당 값을 숫자로 변환하지만, 해당 값을 변환할 수 없는 경우 JavaScript 엔진은 NaN을 반환합니다. 즉, 숫자(숫자로 변환할 수 없음, mate!)와 다음과 같은 나머지 스토리를 반환합니다.
W3Schools 또는 Mozilla Developer Network에서 NaN에 대해 자세히 알아보기
여기서 마법을 보세요.두 번째 플러스는 'NaN'을 주는 단항 연산자입니다.
console.log(('b' + 'a' + + 'a' + 'a').toLowerCase());
console.log(('b' + 'a' + + 'a' + 'a'));
console.log(('b' + 'a' + 'a' + 'a').toLowerCase());
언급URL : https://stackoverflow.com/questions/57456188/why-is-the-result-of-ba-a-a-tolowercase-banana
'source' 카테고리의 다른 글
Twig에서 null을 확인하는 방법 (0) | 2022.10.26 |
---|---|
mapState 와 setter (0) | 2022.10.26 |
MariaDB 10.3.18 : 랜덤하고 고유한 값을 가진 2개의 레코드를 얻는 방법 (0) | 2022.10.26 |
입력 파일을 열 수 없습니다: 장인 (0) | 2022.10.26 |
.c vs .cc vs .cpp vs .hpp vs .cxx (0) | 2022.10.26 |