面试题:你真的懂js吗?
OneWord 2021-03-22 JavaScript
# 面试题:你真的懂js吗?
首先我们来看下题目,问最后打印的x结果是啥。
var x = 1;
if(function f(){}){
x+= typeof f;
};
console.log(x)
1
2
3
4
5
2
3
4
5
代码很短,粗略一看。
这不报错吗?? 报错!!它不报错谁报错?
不是if判断那里报错就是typeof那里报错
那这就恭喜你,完美答错了
当然,有的人可能回答出了正确答案,但你真正明白了这道题吗??
接下来我们一起分析一下这道题
# 关于if判断
首先我们要知道,在js中if()判断括号中的表达式只要不是false都会执行的
if语句会自动执行相应的Boolean转换将括号里里的转化为Boolean值
而对应转换为false的值仅有6个:fales,""(空字符串),0,null,undefined
所以说,只要不是以上六个值,if都会进入执行
if(0){
console.log('我来了~')
}else{
console.log('我走了~')
}
1
2
3
4
5
2
3
4
5
比如运行这个示例,就会打印"我走了~",因为 0 被自动转换成了对应的 Boolean 值 (false)。
# 关于函数括号问题
贴一下原题:
if(function f(){})
1
题目中的函数是被()给给包裹起来,所以!!
这里的f其实已经消失了,变成了表达式function(){}
这样的,有人认为f都没有了,你跟着typeof f不报错吗?
当然不报错,typeof在js中永远不会报错的,如果未定义,就会返回undefined。
# 关于typeof的问题
经过以上结果分析,if成功进入判断,typeof返回undefined
再根据js中1与undefined相加
得到 NaN没错了,所以答案就是NaN!!!
那很遗憾,你再次答错了,
正确答案是1undefined,这是为什么呢?
我们上面说到,js中typeof不会报错,但我们也应该知道他另一个知识点
typeof虽然给我们返回的是数据类型,但他是以字符串形式返回的
所以这里发生了字符串的拼接
最终答案 1undefined