2016-09-28 6 views
0

JavaScript 강제 변환에 대해 조금 읽는 동안 나는 이것을 보았습니다.console.log (...)의 다른 출력과 REPL 모드

[] + {}; // [object Object] 
{} + []; // 0 

나는 이것이 어떻게 작동하는지 이해하지만 내가 이해할 수없는 생각은 왜하지 "CONSOLE.LOG"위의 두 문장을 드래그하는 서로 다른 두 가지에 REPL 결과를 실행하는 단계를 포함한다.

내 초기 생각은 어쩌면 toString을 console.log 매개 변수에서 호출되고 있었다

enter image description here

When ran in browser(Chrome, Firefox) 
console.log([] + {}); // '[object Object]' 
console.log({} + []); // '[object Object]' 

REPL 모드에서 실행하면,하지만 확실히 아니다. 어떤 아이디어?

답변

1

{} + [] 문장은 JavaScript 엔진에서 모호합니다.

같은 함수 내부로 괄호에 싸여
// {} + [] 
{}; // empty block statement with implicit semicolon 
+ []; // empty array, coerced into the number 0 
// = 0 

,이 해석이 잘못되었습니다 인간는 "빈 객체의 추가와 하늘의 배열"로이 글을 읽을 것 동안, 자바 스크립트 엔진이 같이 구문 분석 그래서 엔진은 그것을 문자열 (문자열 으로 강제 변환)과 빈 배열 (문자열 ''으로 강제 변환)으로 해석합니다.