美文网首页
几道有趣的面试题

几道有趣的面试题

作者: 不会骑马的唐山藏 | 来源:发表于2018-11-02 18:21 被阅读0次

    1. var a;

            var b = a * 0;

            if (b == b) {

                console.log(b * 4 + '2' - 0 + 2);

            } else {

                console.log(!b * 4 + '2' - 0 + 2);// !b = 1;

            }  

             解答:   a声明为赋值,结果为undefined  b=a*0,undefined*0结果为 NaN ,NaN与NaN不相等故而执行else里的代码  b隐式转换布尔值为false ,而false转换为数字为0,故而!b=1;

    所以不难得出结果为44.

            2.

            var obj = {proto : {a:1,b:2}};

            function F () {};

            F.prototype = obj.proto;

            var f = new F();

            obj.proto.c = 3;

            obj.proto = {a:-1,b:-2};

            console.log(f.a);

             console.log(f.c);

             delete F.prototype['a'];    

              console.log(f.a);

                console.log(obj.proto.a);

          解答:  F为构造函数  ,第三行代码将obj的proto属性赋给了F的原型, 而f为F的实例对象,故而f.a结果为obj里的a的值,也就是1;

    而复杂数据类型直接传递的是指针,也就是说在obj的proto中加入 属性c,那么F的原型中也会有c属性,故而f.c的值为3;

            在F的原型中删除了a属性,f为F的实例对象,故而删除 之后f.a的值为undefined;

            而后obj的指针方向发生了改变,所以obj.proto.a的结果为 -1;

                3.

            <ul>

            <li id="1">1</li>

            <li id="2"></li>

            <li id="3">1</li>

            <li id="4"></li>

            <li id="5"></li>

            <li id="6"></li>

            <li id="7">1</li>

        </ul>

            var lis = document.getElementsByTagName('li');

            for  (var i = 0; i < lis.length; i++) {

                if (lis[i].innerHTML == '') {

                    lis[i].parentNode.removeChild(lis[i]);

                }

            }

            因为少了一个i--; 所以当i = 0的时候检查失败继续执行,i=1时检查成功删除索引为1的li结构,i从2开始查找 id为5的但是内容为空的li最后被剩下了

              4.输出结果是多少

            ( function test () {

                var  a = b = 5;

                var c = 5, d = 5; e = 5;

                console.log(a)  //自调用  函数内部都是5

                console.log(b)

                console.log(c)

                console.log(d)

                console.log(e)

            })();

                console.log(a)  //报错

                console.log(b)  //隐式全局变量  5

                console.log(c)  //函数外访问不到 所以是报错了

                console.log(d)  //函数外访问不到 所以是报错了

                console.log(e) ////隐式全局变量  5

            5. 输出 结果是什么

            var a = {

                name: '小明'

            };

            var b = a;

            a = {

                name: '小王'

            };

            console.log(a.name);   

            console.log(b.name);  

         a重定向,指针发生了改变,原来的指针复制给了b,所以a.name为小王, b.name为小明

            6.输出 结果是什么

              if (!("t" in window)) {

               var t = 1;

             }

             console.log(t);

             输出 结果是 undefined

            代码的含义是  如果window里没有t这个 属性就声明t并赋值1  但是  ==> js引擎会将var 提前 那么相当于代码变为

            var t ;

            if (! 't' in window) {

                t = 1;

            }

            console.log(t);

               声明提前之后,if 语句的判断结果为false,所以永远不会执行。故而结果为undefined

    相关文章

      网友评论

          本文标题:几道有趣的面试题

          本文链接:https://www.haomeiwen.com/subject/ckwcxqtx.html