CodeMash 2012의 "Wat" 강연은 JavaScript의 몇 가지 수수께끼 같은 동작을 밝혀냈습니다. 여기에서는 기본 메커니즘을 자세히 살펴보고 JSFiddle 예제에서 관찰된 결과를 설명합니다.
[] + [] result: ""
배열 결합으로 인해 생성된 빈 문자열은 연산자가 변환하는 것을 강조합니다. 두 피연산자 모두 기본 요소에 대해 배열에서 toString()을 호출합니다. 빈 배열의 경우 이 변환은 빈 문자열을 생성합니다.
[] + {} result: [Object]
이전과 마찬가지로 빈 배열을 프리미티브로 변환하면 빈 문자열이 생성됩니다. 그러나 객체는 toString() 메서드를 사용하여 문자열로 강제 변환되어 "[Object]"가 됩니다. 이 문자열은 빈 문자열과 연결되어 "[객체]"를 생성합니다.
{} + [] result: [Object]
여기서 {}는 빈 블록으로 해석되어 빈 프리미티브가 생성됩니다. 값. 그런 다음 연산자는 toString()을 통해 객체를 문자열로 변환하려고 시도하여 "[Object]"로 이어집니다. 그러나 이 동작은 비디오에서 결과가 0이어야 함을 시사하는 것처럼 예외적입니다.
{} + {} result: [Object][Object]
이전 사례와 유사하게 객체가 문자열로 강제 변환됩니다. 그러나 단항 연산자가 없으므로 결과가 숫자로 변환되지 않습니다. 대신 "[Object]"와 "[Object]"의 연결이 반환됩니다.
result: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
숫자 빼기 문자열 결과는 NaN입니다. Array.join에 인수로 전달되면 toString()을 통해 문자열로 변환하면 "NaN"이 생성됩니다. 그런 다음 배열의 Join() 메서드는 이 문자열을 반복적으로 연결하여 관찰된 결과로 이어집니다.
이러한 특이한 동작은 값을 프리미티브로 변환하는 특정 규칙과 연산자의 동작에서 비롯됩니다. 자바스크립트에서. 그 중 일부는 직관적이지 않은 것처럼 보일 수 있지만 기본 메커니즘을 이해하면 개발자가 자신의 코드에서 이러한 문제를 더 잘 예측하고 처리할 수 있습니다.
위 내용은 배열과 개체를 추가할 때 JavaScript가 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!