인터뷰 질문 console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]) 출력은 무엇입니까? 인터뷰 중에 이런 면접 질문을 접했는데, 면접 질문은 유형 변환, 암시적 유형 변환, 연산자 등을 조사했는데, 어떻게 답해야 할지 몰라서 답변을 못 한 것이 아닙니다. 방금 질문을 읽었습니다. 하지만 면접 질문이니까 잘 풀어보세요.
먼저 실행 순서를 명확히 해야 합니다.
먼저([][[]] + [])
를 실행하고, 먼저 내부의[][[]]
를 실행한 다음 [ ][[]], 실제로는 [] 빈 배열의 [] 키를 사용하여 값을 실행합니다([][[]] + [])
,先执行里面的[][[]]
,在计算[][[]]
时,其实就是执行[]空数组里面key为[]的值
[]
。空数组没有任何元素。[]
作为属性名来访问空数组的属性。在这种情况下,由于[]
本身是一个数组,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 엔진은 이를 문자열로 변환하려고 시도합니다.[]
는 빈 배열이므로 문자열로 변환한 후의 결과는 빈 문자열""
입니다.
마지막으로 엔진은 빈 배열에 있는""
속성에 액세스하려고 시도합니다. 이 속성은 빈 배열에 존재하지 않으므로 결과는정의되지 않음
입니다.
[][[]]
를 실행한 결과는
정의되지 않았습니다
입니다. 그러면
([][[]] + [])
의 다음 실행은 암시적 유형 변환을 수행하고
를 변환하는 (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 중국어 웹사이트의 기타 관련 기사를 참조하세요!