>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 '[[]][ []] [ []]'가 10인 이유는 무엇입니까?

JavaScript에서 '[[]][ []] [ []]'가 10인 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-15 10:29:02682검색

Why does

JavaScript에서 " [[]][ []] [ []]"의 수수께끼 탐색

JavaScript 개발자는 당황스러울 수 있습니다. " [[]][ []] [ []]"라는 표현식을 사용하면 "10"이라는 예상치 못한 결과가 생성됩니다. 이 불가사의한 계산 뒤에 숨은 과정을 파헤쳐 그 복잡함을 풀어보겠습니다.

Breaking It Down

표현을 분해하면 다음과 같습니다.

++[[]][+[]]
+
[+[]]

JavaScript에서는 ' ' 연산자를 사용하여 배열 요소를 숫자로 강제 변환할 수 있습니다. 구체적으로, [] === 0입니다. 이는 배열을 빈 문자열로 강제 변환하여 "" === 0이 됩니다.

계산 단순화

이렇게 이해하면, 다음과 같이 표현식을 단순화할 수 있습니다.

++[[]][0]
+
[0]

배열의 첫 번째 요소에 액세스하고, [[]][0], 내부 배열을 반환합니다. 참조로 인해 혼동을 피하기 위해 A로 지칭하겠습니다.

증분 및 변환

연산자는 피연산자를 1씩 증가시키고 증가된 결과를 반환합니다. 따라서 [[]][0]은 숫자(A) 1과 동일합니다.

문자열 연결

더 단순화할 수 있습니다.

(+[] + 1)
+
[0]

먼저, []는 문자열 "0"으로 강제 변환됩니다. 그런 다음 []의 결과는 1입니다. 마지막으로 배열을 와 결합할 수 있으므로 "1"은 를 사용하여 "0"과 연결되어 10이 됩니다.

기술

뒤에서 []를 0으로 강제 변환하는 과정에는 몇 가지 사양이 포함됩니다. 참조:

  • 단항 연산자: 피연산자를 숫자로 변환하고 먼저 문자열("")로 강제 변환합니다.
  • 숫자 변환( ToNumber()): 배열([])을 문자열로 강제 변환합니다. ("").
  • 원시 값 변환(ToPrimitive()): 문자열 모드에서는 객체의 [[DefaultValue]] 메서드를 사용합니다.
  • [ [DefaultValue]]: 인수를 사용하여 [[Get]] 메서드를 호출합니다. "toString".
  • 배열의 toString 메서드: [[Join]] 메서드를 호출하여 []에 대해 ""를 생성합니다.

결론

이번 단계별 분석을 통해 우리는 JavaScript의 당황스러운 표현 "[[]][ []] [ []]" 뒤에 숨은 메커니즘에 대해 알아보세요. 그 실행에는 강제, 증가, 연결이 포함되며 궁극적으로 "10"이라는 놀라운 결과로 이어지는 논리적 여정이 드러납니다.

위 내용은 JavaScript에서 '[[]][ []] [ []]'가 10인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.