「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」
大家好,大家新年好,本文讲的是一道比较经典的前端面试题,本文将会深入分析此题,深挖知识点,让你完全掌握此题的解法。
这是道 Web 前端的陈年老题,老是老,但我还想要说,因为面试的时候经常出现,而且不仔细就容易出错。此题考察的是对 JavaScript typeof方法的熟悉程度和运算符的优先级顺序。
在这里我就先不直接给出答案,我们先看看思路。
typeof
typeof的语法
首先是typeof方法,它是一个运算符,有2种使用方式:typeof(表达式)和typeof 变量名,第一种是对表达式做运算,第二种是对变量做运算。
typeof的返回值
typeof运算符的返回类型为字符串,值包括如下几种:
'undefined' 表示:未定义的变量或值
'boolean' 表示:布尔类型的变量或值
'string' 表示:字符串类型的变量或值
'number'表示:数字类型的变量或值
'object'表示:对象类型的变量或值或者null
'function'表示:函数类型的变量或值
'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有两部分组成,typeof和1/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运算符优先级,这样这道题我们才能做对。