变量类型判断异常:typeof返回number却进入字符串判断分支?
问题根源:赋值运算符 vs 比较运算符
你遇到的问题是把赋值运算符=当成了比较运算符,这是JavaScript里非常常见的新手坑。
为什么会进入if分支?
在你的代码里:
if (typeOfVariable = 'string'){
这里的=是赋值操作,它会把字符串'string'赋值给typeOfVariable,然后这个赋值表达式的返回值就是'string'。在JavaScript的布尔判断中,非空字符串属于真值(truthy),所以这个条件会始终被判定为true——不管你之前打印的typeOfVariable是number还是其他类型,代码都会进入这个分支。
这就是为什么即使初始的typeOfVariable是number,代码还是会执行chai = parseFloat(chai):因为if里的赋值操作已经把typeOfVariable改成'string'了,同时条件被判定为true。
正确的写法
你需要用相等比较运算符来代替赋值运算符:
- 推荐用
===(严格相等):同时比较值和类型,完全匹配你这里的需求——你已经用typeof拿到了类型字符串,严格相等的判断逻辑更严谨,能避免意外的类型隐式转换。 - 也可以用
==(松散相等):只比较值,不严格匹配类型,但这里用===更合适。
修正后的代码:
var typeOfVariable = typeof(chai); console.log(typeOfVariable); //输出为number if (typeOfVariable === 'string'){ chai = parseFloat(chai); //现在只有当chai是string类型时才会执行这行 }
额外小提示
当chai已经是number类型时,parseFloat(chai)其实不会报错(它会直接返回原数字),你之前遇到的报错应该就是因为错误进入分支后,可能存在其他上下文问题,但核心问题还是条件判断里的赋值错误。
内容的提问来源于stack exchange,提问作者chaitanya guruprasad
相关产品推荐
相关产品推荐

