面试题: typeof 1/0 等于什么和为什么?

3,006 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战

大家好,大家新年好,本文讲的是一道比较经典的前端面试题,本文将会深入分析此题,深挖知识点,让你完全掌握此题的解法。

这是道 Web 前端的陈年老题,老是老,但我还想要说,因为面试的时候经常出现,而且不仔细就容易出错。此题考察的是对 JavaScript typeof方法的熟悉程度和运算符的优先级顺序。

在这里我就先不直接给出答案,我们先看看思路。

typeof

typeof的语法

首先是typeof方法,它是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。

typeof的返回值

typeof运算符的返回类型为字符串,值包括如下几种:

  1. 'undefined' 表示:未定义的变量或值

  2. 'boolean' 表示:布尔类型的变量或值

  3. 'string' 表示:字符串类型的变量或值

  4. 'number'表示:数字类型的变量或值

  5. 'object'表示:对象类型的变量或值或者null

  6. 'function'表示:函数类型的变量或值

  7. 'symbol':表示:Symbol类型的变量或值

举个例子

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof null // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console // 'object'
typeof console.log // 'function'

回到本题

题目解析

错误解法typeof 1/0有两部分组成,typeof1/0,所以我们很容易想到下面的解法,首先我们把公式分开看,typeof方法和1/0=Infinity,所以就等价于typeof Infinity,那么结果是number

为什么上面的解法是错误的?

答:上面的解法没有想到JS运算符优先级,typeof的优先级低于除法吗?是先算除法后算typeof方法吗?

那么typeof和除法的优先级那个高?

答:typeof的优先级高于除法。

正确的解法:由于typeof运算符优先级高于除法,所以会先执行typeof 1, 返回'number'。然后执行 'number' / 0的操作。此时会隐式调用Number转型函数将'number'转换成NaN。最后执行NaN / 0的操作。此时会返回NaN 所以结果是NaN。很意外吧!

总结

这个题目虽然很简单,但是很容易出错,首先我们要知道typeof的用法和返回,还有我们要知道js运算符优先级,这样这道题我们才能做对。