MST
星途 面试题库

面试题:JavaScript复杂表达式的隐式类型转换

分析下面代码输出结果并详细阐述隐式类型转换的步骤:`console.log(!![] + [] + !{} + {} + [] + null + (1,0) + undefined + (function(){}));`
18.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 分析代码各部分及隐式类型转换步骤
    • !![]
      • []是一个空数组,在JavaScript中,空数组是真值,所以![]false(因为!是取反操作,将真值转换为假值)。
      • 再进行一次!操作,即!![],就将false又取反为true。在隐式类型转换为字符串时,true会转换为字符串"true"
    • []
      • 当与其他非数组类型通过+运算符连接时,空数组会隐式转换为字符串""
    • !{}
      • {}是一个空对象,在JavaScript中,对象是真值,所以!{}false。在隐式类型转换为字符串时,false会转换为字符串"false"
    • {}
      • 当对象与其他类型通过+运算符连接时,会先调用toString方法。{}.toString()返回"[object Object]"
    • []
      • 再次出现的空数组,同样隐式转换为字符串""
    • null
      • null与其他类型通过+运算符连接时,会隐式转换为字符串"null"
    • (1,0)
      • 这是一个逗号表达式,逗号表达式会返回最后一个表达式的值,所以(1,0)的值为0。在与其他类型通过+运算符连接时,0会隐式转换为字符串"0"
    • undefined
      • undefined与其他类型通过+运算符连接时,会隐式转换为字符串"undefined"
    • (function(){}))
      • 函数对象与其他类型通过+运算符连接时,会先调用toString方法,(function(){}).toString()返回"function (){}"
  2. 最终输出结果
    • 将上述各部分转换后的字符串连接起来,得到:"true" + "" + "false" + "[object Object]" + "" + "null" + "0" + "undefined" + "function (){}"
    • 结果为:"truefalse[object Object]null0undefinedfunction (){}"

所以,console.log(!![] + [] + !{} + {} + [] + null + (1,0) + undefined + (function(){}))的输出结果是"truefalse[object Object]null0undefinedfunction (){}"