三道易错的面试题

作者: MJ 分类: javascript 发布时间: 2019-06-25 10:49

今天在看到了三道面试题,《据说这3道前端面试题有97%的人会答错》,一看这个标题就勾起来兴趣了。

题目一

var a = 1.0 - 0.9;
if(a == 0.1){
    console.log(true);
}else{
    console.log(false);
}
var b = 0.8 - 0.7;
if(a == b){
    console.log(true);
}else{
    console.log(false);
}

题目二

var x = 30;
function test(){
    console.log(x);
    var x = 10;
    console.log(x);
    x = 20;
    function x(){};
    console.log(x);
}
test();

题目三

var a = {n:1};
var b = a;
a.x = a = {n:2};
console.log(a.x);
console.log(b.x);

先说结果,我自己翻车在了第三题的console.log(a.x),经过一番研究之后,也搞明白了,学习了。

解题:

题目一:

其实这个题目之前做过类似的经典问题,就是0.1 + 0.2 = 0.3?(0.30000000000000004),大家可以参考:https://blog.csdn.net/u013347241/article/details/79210840 ,不做解释了。

题目二:

大家参考之前写的一道题目分析的文章js面试题解析,这类题目拿到之后先写一下伪代码:

var x;
function test(){
    function x(){}
    var x;
    console.log(x);
    x = 10;
    console.log(x);
    x = 20;
    console.log(x);
}
x = 30;

看了上边的伪代码,结果一目了然。

题目三:

重点说下题目三吧,翻车的核心就是在a.x = a = {n:2}这一句上,首先还是写一下伪代码。

var a;
var b;
a = {n:1};
b = a;
a.x = a({n:2});
a = {n:2};
console.log(a.x);
console.log(b.x);

由于a是对象,是一个引用数据类型,所以a的改变会引起b的变化,在执行到a.x = a = {n:2};的时候,b已经是{n:1,x:{n:2}},然后a又被重置为{n:2},所以现在执行a.x,b.x其结果就是:

undefined
{n: 2}

欢迎关注小程序,感谢您的支持!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注