희미한! 인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 무엇을 출력합니까?
머리말
인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 출력은 무엇입니까? 인터뷰 중에 이런 면접 질문을 접했는데, 면접 질문은 유형 변환, 암시적 유형 변환, 연산자 등을 조사했는데, 어떻게 답해야 할지 몰라서 답변을 못 한 것이 아닙니다. 방금 질문을 읽었습니다. 하지만 면접 질문이니까 잘 풀어보세요.
이 문제를 해결하려면 지식이 필요합니다
- "+": 단항 +는 Number()를 사용하는 것과 동일한 변환을 수행합니다.
- + 기호가 두 숫자의 추가인 경우 피연산자는 객체이거나 객체입니다. 값 또는 부울인 경우 toString 메서드를 호출하여 문자열로 변환합니다.
- "!": 연산자가 아니며 이 작업은 항상 부울 값을 반환합니다.
- "!!": 이 문제를 해결하려면 부울 값으로 강제 변환합니다.
문제 ([] [[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]
먼저 실행 순서를 명확히 해야 합니다.
먼저 ([][[]] + [])
를 실행하고, 먼저 내부의 [][[]]
를 실행한 다음 [ ][[]], 실제로는 [] 빈 배열의 [] 키를 사용하여 값을 실행합니다([][[]] + [])
,先执行里面的[][[]]
,在计算 [][[]]
时,其实就是执行[]空数组里面key为[]的值
- 首先,JavaScript 引擎解析空数组
[]
。空数组没有任何元素。 - 接下来,引擎尝试使用
[]
作为属性名来访问空数组的属性。在这种情况下,由于[]
本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于[]
为空数组,转换成字符串后结果为一个空字符串""
。 - 最后,引擎会尝试访问空数组中名为
""
的属性。由于这个属性并不存在于空数组中,所以结果为undefined
。
所以,执行 [][[]]
的结果是 undefined
。
那么([][[]] + [])
接下去执行就是(undefined + [])
将会执行隐式类型转换,将undefined
转换为字符串"undefined"
,将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"
其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true
转换为数字1
。得到的结果就是[1]
。于是我们就可以得到([][[]] + [])[+!![]]
为undefined[1]
这个的结果就是字符串'n'
接下来就是执行([]+{})[+!![]+ + !![]]
这一部分,再将这部分的结果和上面的结果相加
先执行
([]+{})
, 计算[]+{}
。这将触发隐式类型转换,将空对象转换为字符串"[object Object]"
,然后将两个字符串拼接在一起。因此,结果是'[object Object]'
。再执行[+!![]+ + !![]],
+!![]
前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1
,得到的结果是[2]
。那么这两部分合起来就是
'[object Object]'[2]
,就是字符串的第三个值b
最后将前面部分得到的结果 'n'
和后面部分得到的结果 'b'
相加,得到最后的结果'nb'
总结:这个题目一时解决不了的话,可能有以下几个原因,第一个就是不太清楚执行顺序,其次就是不太理解[][[]]
这个,实际上就是获取空数组key为[]
的值,又因为数组的key为字符串,所以会将[]
转为''
- 먼저 JavaScript 엔진은 빈 배열
[]
를 구문 분석합니다. >. 빈 배열에는 요소가 없습니다. 다음으로 엔진은 []
를 속성 이름으로 사용하여 빈 배열의 속성에 액세스하려고 시도합니다. 이 경우 []
자체가 배열이므로 JavaScript 엔진은 이를 문자열로 변환하려고 시도합니다. []
는 빈 배열이므로 문자열로 변환한 후의 결과는 빈 문자열 ""
입니다.
마지막으로 엔진은 빈 배열에 있는 ""
속성에 액세스하려고 시도합니다. 이 속성은 빈 배열에 존재하지 않으므로 결과는 정의되지 않음
입니다.
[][[]]
를 실행한 결과는 정의되지 않았습니다
입니다. 🎜🎜그러면 ([][[]] + [])
의 다음 실행은 암시적 유형 변환을 수행하고 를 변환하는 <code>(undefine + [])
입니다. 정의되지 않음을 "undefine"
문자열로 변환하고, []를 ""로 변환한 다음 두 문자열을 함께 연결합니다. 따라서 결과는 "정의되지 않음"
🎜🎜🎜그런 다음 [+!![]]을 실행하면 !![] 빈 배열이 부울 값 true로 변환되고, 단항 연산 서비스 +는 숫자 값으로 변환되고, +true는 true
를 숫자 1
로 변환합니다. 결과는 [1]
입니다. 따라서 ([][[]] + [])[+!![]]
를 undefine[1]
으로 얻을 수 있습니다. 결과는 입니다. 'n'
🎜🎜🎜다음 단계는 ([]+{})[+!![]+ + !![]]
를 실행한 다음 추가하는 것입니다. 이 부분의 결과를 위의 결과로🎜- 🎜🎜먼저
([]+{})
를 실행하고 []+{}
를 계산하세요. 이는 암시적 유형 변환을 트리거하여 빈 개체를 문자열 "[object Object]"
로 변환한 다음 두 문자열을 함께 연결합니다. 따라서 결과는 '[object Object]'
입니다. 🎜🎜🎜🎜Execute [+!![]+ + !![]] 다시, +!![]
는 이전에 파싱되어 1을 얻었으므로 이 부분을 실행한 후 얻은 값은 숫자 값 1+1
에 1을 더하면 [2]
가 됩니다. 🎜🎜🎜🎜그러면 결합된 두 부분은 '[object Object]'[2]
이며, 이는 문자열의 세 번째 값 b입니다🎜🎜'b'
에 'n'
결과를 더해 최종 결과 'nb'
🎜🎜요약 : 이 질문이 현재 해결되지 않는다면 여러 가지 이유가 있을 수 있습니다. 첫째는 실행 순서가 명확하지 않은 것이고, 둘째는 [][[]]
가 아니기 때문입니다. 실제로는 []
의 값으로 빈 배열 키를 얻는 것으로 이해되며, 배열의 키는 문자열이므로 []
를 다음과 같이 변환합니다. ''
이므로 찾을 수 없습니다. 정의되지 않은 상태를 반환합니다. 이제 이 면접 질문을 아시나요? 🎜🎜추천 학습: "🎜웹 프론트 엔드 개발 비디오 튜토리얼🎜"🎜🎜🎜위 내용은 희미한! 인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 무엇을 출력합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

이 기사는 Java의 컬렉션 프레임 워크의 효과적인 사용을 탐구합니다. 데이터 구조, 성능 요구 및 스레드 안전을 기반으로 적절한 컬렉션 (목록, 세트, 맵, 큐)을 선택하는 것을 강조합니다. 효율적인 수집 사용을 최적화합니다

엔트리 레벨 타입 스크립트 자습서를 마스터 한 후에는 TypeScript를 지원하고 JavaScript로 컴파일하는 IDE에서 자신의 코드를 작성할 수 있어야합니다. 이 튜토리얼은 TypeScript의 다양한 데이터 유형으로 뛰어납니다. JavaScript에는 NULL, UNDEFINED, BOOLEAN, 번호, 문자열, 기호 (ES6에 의해 소개 됨) 및 객체의 7 가지 데이터 유형이 있습니다. TypeScript는이 기반으로 더 많은 유형을 정의 하며이 튜토리얼은이 모든 튜토리얼을 자세히 다룹니다. 널 데이터 유형 JavaScript와 마찬가지로 Null in TypeScript

이 튜토리얼은 Chart.js를 사용하여 파이, 링 및 버블 차트를 만드는 방법을 설명합니다. 이전에는 차트 유형의 차트 유형을 배웠습니다. JS : 라인 차트 및 막대 차트 (자습서 2)와 레이더 차트 및 극지 지역 차트 (자습서 3)를 배웠습니다. 파이 및 링 차트를 만듭니다 파이 차트와 링 차트는 다른 부분으로 나뉘어 진 전체의 비율을 보여주는 데 이상적입니다. 예를 들어, 파이 차트는 사파리에서 남성 사자, 여성 사자 및 젊은 사자의 비율 또는 선거에서 다른 후보자가받는 투표율을 보여주는 데 사용될 수 있습니다. 파이 차트는 단일 매개 변수 또는 데이터 세트를 비교하는 데만 적합합니다. 파이 차트의 팬 각도는 데이터 포인트의 숫자 크기에 의존하기 때문에 원형 차트는 값이 0 인 엔티티를 그릴 수 없습니다. 이것은 비율이 0 인 모든 엔티티를 의미합니다
