• Javascript面试题解析


    Javascript的一些面试题让很多同学感到头疼,下面就根据兄弟连教育

    )毕业学员面试遇到的面试题,给大家做一个简单的分享,希望对初入职场的你们有一些帮助:Javascript面试题解析。

     

    第一题

    /*

       解析:

         + 优先级大于 ?

       此题等价于: 'Value is true' ? 'Something' : 'Nothing'

       所以结果是:'Something'

    */

    var val = 'smtg';

    console.log('Value is ' + (val === 'smtg') ?'Something' : 'Nothing');

     

    第二题

    /*

    *解析:

    *    typeof 返回一个表示类型的字符串

    typeof的结果请看下面:

    **type**         **result**

    Undefined   "undefined"

    Null        "object"

    Boolean     "boolean"

    Number      "number"

    Symbol      "symbol"

    Hostobject Implementation-dependent

    Function    "function"

    Object      "object"

     

    instanceof运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上

                

    所以输出["object",false]

    */

    functiontwo(){

    console.info([typeofnull, null instanceof Object]); //["object", false]

     

    第三题

    /*

       [JavaScript中的稀疏数组与密集数组][1]

       

        解析:

          一般来说,JavaScript中的数组是稀疏的,也就是说,数组中的元素之间可以有空隙

          其实在javascript中并没有常规的数组,所有的数组其实就是一个对象。

         javascript的数组根本没有索引,因为索引是数字,而js中数组的索引是string,

          arr[1]其实就是arr["1"],给arr["1000"] =1,arr.length也会自动变为1001.

          这些表现的根本原因就是,JavaScript中的对象就是字符串到任意值的键值对.注意键只能是字符串.

       

        看一下 Array.prototype.filter 的部分代码:

       

        var t =Object(this);

        var len =t.length >>> 0;

        if (typeoffun !== 'function') {

          thrownew TypeError();

        }

        var res =[];

        varthisArg = arguments.length >= 2 ? arguments[1] : void 0;

        for (var i= 0; i < len; i++) {

          if (i int) { // 注意这里!!!

            varval = t[i];

            if(fun.call(thisArg, val, i, t)) {

             res.push(val);

            }

          }

        }

        从上面可知filter对数组进行遍历时,会首先检查这个索引值是不是数组的一个属性.测试一下:

       console.info(0 in ary); //true

       console.info(1 in ary); //true

       console.info(4 in ary); //false

       console.info(10 in ary); // false

        也就是说3~9的索引根本没有是初始化

       

        所以答案:[];

    */

    var ary = [0,1,2];

    ary[10] = 10;

    console.info(ary.filter(function(x) { return x ===undefined;}));

     

    第四题

    /*

        解析:

            y 被赋值到全局. x 是局部变量. 所以打印 x 的时候会报 ReferenceError

       

    */

    (function(){

      var x = y =1;

    })();

    console.log(y); // 1

    console.log(x); // error

     

    第五题

    /*

        解析:

            当函数参数涉及到 any rest parameters,

            anydefault parameters or any destructured parameters 的时候,

            这个 arguments 就不在是一个 mapped arguments object 了.....,

            所以答案是12,这个需要好好体会一下

    */

    function sidEffecting(ary) {

      ary[0] =ary[2];

    }

    function bar(a,b,c=3) {

      c = 10

     sidEffecting(arguments);

      return a + b+ c;

    }

    bar(1,1,1);

     

     

  • 相关阅读:
    [.Net 5.0] 笔记
    java计算两个字符串日期的相差天数
    记一个使用fyne-cross编译的坑
    windows gcc 遇到的问题解决
    异步处理在支付环节的应用
    怎么修复 "replaceAll is not a function" JavaScript Error?
    Js生成随机数 生成随机字符串的5种方法
    json-bigint的介绍和使用-解决Javascript的有关大整数问题
    国产操作系统——银河麒麟V10 SP1使用小结
    【转载】 银河麒麟V10系统安装U盘制作
  • 原文地址:https://www.cnblogs.com/xdlltao/p/5881564.html
Copyright © 2020-2023  润新知