인터뷰 질문 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 엔진은 이를 문자열로 변환하려고 시도합니다. []
는 빈 배열이므로 문자열로 변환한 후의 결과는 빈 문자열 ""
입니다.
마지막으로 엔진은 빈 배열에 있는 ""
속성에 액세스하려고 시도합니다. 이 속성은 빈 배열에 존재하지 않으므로 결과는 정의되지 않음
입니다.
[][[]]
를 실행한 결과는 정의되지 않았습니다
입니다. 🎜🎜그러면 ([][[]] + [])
의 다음 실행은 암시적 유형 변환을 수행하고 를 변환하는 <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 중국어 웹사이트의 기타 관련 기사를 참조하세요!