> 웹 프론트엔드 > JS 튜토리얼 > 배열과 개체를 추가할 때 JavaScript가 예기치 않은 결과를 생성하는 이유는 무엇입니까?

배열과 개체를 추가할 때 JavaScript가 예기치 않은 결과를 생성하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-16 09:37:10
원래의
621명이 탐색했습니다.

Why Does JavaScript Produce Unexpected Results When Adding Arrays and Objects?

JavaScript 추가 기능의 기발한 동작 이해

CodeMash 2012의 "Wat" 강연은 JavaScript의 몇 가지 수수께끼 같은 동작을 밝혀냈습니다. 여기에서는 기본 메커니즘을 자세히 살펴보고 JSFiddle 예제에서 관찰된 결과를 설명합니다.

빈 배열 빈 배열

[] + []
result: ""
로그인 후 복사

배열 결합으로 인해 생성된 빈 문자열은 연산자가 변환하는 것을 강조합니다. 두 피연산자 모두 기본 요소에 대해 배열에서 toString()을 호출합니다. 빈 배열의 경우 이 변환은 빈 문자열을 생성합니다.

빈 배열 객체

[] + {}
result: [Object]
로그인 후 복사

이전과 마찬가지로 빈 배열을 프리미티브로 변환하면 빈 문자열이 생성됩니다. 그러나 객체는 toString() 메서드를 사용하여 문자열로 강제 변환되어 "[Object]"가 됩니다. 이 문자열은 빈 문자열과 연결되어 "[객체]"를 생성합니다.

객체 빈 배열

{} + []
result: [Object]
로그인 후 복사

여기서 {}는 빈 블록으로 해석되어 빈 프리미티브가 생성됩니다. 값. 그런 다음 연산자는 toString()을 통해 객체를 문자열로 변환하려고 시도하여 "[Object]"로 이어집니다. 그러나 이 동작은 비디오에서 결과가 0이어야 함을 시사하는 것처럼 예외적입니다.

객체 객체

{} + {}
result: [Object][Object]
로그인 후 복사

이전 사례와 유사하게 객체가 문자열로 강제 변환됩니다. 그러나 단항 연산자가 없으므로 결과가 숫자로 변환되지 않습니다. 대신 "[Object]"와 "[Object]"의 연결이 반환됩니다.

Array(16).join("wat" - 1)

result: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
로그인 후 복사

숫자 빼기 문자열 결과는 NaN입니다. Array.join에 인수로 전달되면 toString()을 통해 문자열로 변환하면 "NaN"이 생성됩니다. 그런 다음 배열의 Join() 메서드는 이 문자열을 반복적으로 연결하여 관찰된 결과로 이어집니다.

결론

이러한 특이한 동작은 값을 프리미티브로 변환하는 특정 규칙과 연산자의 동작에서 비롯됩니다. 자바스크립트에서. 그 중 일부는 직관적이지 않은 것처럼 보일 수 있지만 기본 메커니즘을 이해하면 개발자가 자신의 코드에서 이러한 문제를 더 잘 예측하고 처리할 수 있습니다.

위 내용은 배열과 개체를 추가할 때 JavaScript가 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿