JavaScript中typeof运算符除'strings'外均返回undefined问题求助
问题成因
你遇到的问题主要是以下三类新手常见错误导致,可按顺序排查:
- 拼写错误:JS 是严格大小写敏感的语言,
typeof运算符必须全小写,如果你写成Typeof、typeOf、typof这类形式,本质上是访问一个未声明的自定义变量,非严格模式下不会抛出引用错误,会直接返回 undefined,只有字符串场景碰巧被单独解析时才会返回正常结果。 - 换行触发自动分号插入:
typeof是一元运算符,必须紧跟要检测的值。如果你把typeof单独放在一行,部分运行环境会自动在typeof后插入分号,相当于typeof没有操作数,直接返回 undefined。如果是在函数内把return和typeof分两行写,JS 会直接在return后插入分号,后面的typeof代码完全不会执行,函数直接返回 undefined。 - 保留字命名冲突:虽然
typeof是 JS 保留关键字,规范不允许作为变量名声明,但非严格模式的低版本运行环境可能支持var typeof = undefined这类非法声明,如果你代码中不小心写了类似内容,所有typeof调用都会返回 undefined。
解决方法
- 保证
typeof全小写,且和要检测的值放在同一行:console.log(typeof '测试字符串') // 输出 'string' console.log(typeof 123) // 输出 'number' console.log(typeof true) // 输出 'boolean' - 如果要检测的值过长需要换行,用括号包裹检测值,且把
typeof和左括号放在同一行:console.log(typeof( 超长的变量名或者表达式 )) - 在代码第一行添加
'use strict'开启严格模式,会直接抛出拼写错误、保留字非法赋值等问题,帮你快速定位错误。
内容的提问来源于stack exchange,提问作者Dyloh
相关产品推荐
相关产品推荐

