목차
머리말
이 문제를 해결하려면 지식이 필요합니다
문제 ([] [[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]
웹 프론트엔드 JS 튜토리얼 희미한! 인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 무엇을 출력합니까?

희미한! 인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 무엇을 출력합니까?

Apr 12, 2023 pm 03:29 PM
프론트엔드 면접 질문

이 기사는 주로 console.log에 대한 인터뷰 질문을 공유합니다. 관심 있는 친구들은 아래에서 이 기사를 살펴보는 것이 모든 사람에게 도움이 되기를 바랍니다.

머리말

인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 출력은 무엇입니까? 인터뷰 중에 이런 면접 질문을 접했는데, 면접 질문은 유형 변환, 암시적 유형 변환, 연산자 등을 조사했는데, 어떻게 답해야 할지 몰라서 답변을 못 한 것이 아닙니다. 방금 질문을 읽었습니다. 하지만 면접 질문이니까 잘 풀어보세요.

희미한! 인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 무엇을 출력합니까?

이 문제를 해결하려면 지식이 필요합니다

  • "+": 단항 +는 Number()를 사용하는 것과 동일한 변환을 수행합니다.
  • + 기호가 두 숫자의 추가인 경우 피연산자는 객체이거나 객체입니다. 값 또는 부울인 경우 toString 메서드를 호출하여 문자열로 변환합니다.
  • "!": 연산자가 아니며 이 작업은 항상 부울 값을 반환합니다.
  • "!!": 이 문제를 해결하려면 부울 값으로 강제 변환합니다.

문제 ([] [[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]

먼저 실행 순서를 명확히 해야 합니다.

먼저 ([][[]] + [])를 실행하고, 먼저 내부의 [][[]]를 실행한 다음 [ ][[]], 실제로는 [] 빈 배열의 [] 키를 사용하여 값을 실행합니다([][[]] + []),先执行里面的[][[]],在计算 [][[]]时,其实就是执行[]空数组里面key为[]的值

  1. 首先,JavaScript 引擎解析空数组 []。空数组没有任何元素。
  2. 接下来,引擎尝试使用 [] 作为属性名来访问空数组的属性。在这种情况下,由于 [] 本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于 [] 为空数组,转换成字符串后结果为一个空字符串 ""
  3. 最后,引擎会尝试访问空数组中名为 "" 的属性。由于这个属性并不存在于空数组中,所以结果为 undefined

所以,执行 [][[]] 的结果是 undefined

那么([][[]] + [])接下去执行就是(undefined + []) 将会执行隐式类型转换,将undefined转换为字符串"undefined",将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"

其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true转换为数字1。得到的结果就是[1]。于是我们就可以得到([][[]] + [])[+!![]]undefined[1]这个的结果就是字符串'n'

接下来就是执行([]+{})[+!![]+ + !![]] 这一部分,再将这部分的结果和上面的结果相加

  1. 先执行([]+{}),  计算[]+{}。这将触发隐式类型转换,将空对象转换为字符串"[object Object]",然后将两个字符串拼接在一起。因此,结果是'[object Object]'

  2. 再执行[+!![]+ + !![]], +!![]前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1,得到的结果是[2]

  3. 那么这两部分合起来就是'[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? 내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? Mar 18, 2025 pm 03:12 PM

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

브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? 브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? Mar 18, 2025 pm 03:14 PM

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

프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? 프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? Apr 04, 2025 pm 02:42 PM

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

브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? 브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? Mar 18, 2025 pm 03:16 PM

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

소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? 소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? Mar 18, 2025 pm 03:17 PM

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

Java의 컬렉션 프레임 워크를 효과적으로 사용하려면 어떻게해야합니까? Java의 컬렉션 프레임 워크를 효과적으로 사용하려면 어떻게해야합니까? Mar 13, 2025 pm 12:28 PM

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

초보자를위한 타이프 스크립트, 2 부 : 기본 데이터 유형 초보자를위한 타이프 스크립트, 2 부 : 기본 데이터 유형 Mar 19, 2025 am 09:10 AM

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

Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Mar 15, 2025 am 09:19 AM

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

See all articles