博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript面试题解析
阅读量:6721 次
发布时间:2019-06-25

本文共 2101 字,大约阅读时间需要 7 分钟。

  hot3.png

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"

Host object Implementation-dependent

Function    "function"

Object      "object"

 

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

             

所以输出["object", false]

*/

function two(){

console.info([typeof null, 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 (typeof fun !== 'function') {

      throw new TypeError();

    }

    var res = [];

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

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

      if (i in t) { // 注意这里!!!

        var val = 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,

        any default 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);

 

转载于:https://my.oschina.net/ljxiu/blog/713658

你可能感兴趣的文章
从零开始写一个 redux(第四讲)
查看>>
构造函数和析构函数
查看>>
转 思杰南京笔试
查看>>
Apache添加到windows服务和移除Apache的windows服务
查看>>
React Native 学习笔记(二)组件生命周期函数
查看>>
前端三大框架有哪些异同呢
查看>>
java IO 包源码解析
查看>>
CSS3 线性渐变(linear-gradient)
查看>>
学术休假-银行储蓄系统
查看>>
[CodeForces - 463B] Caisa and Pylons
查看>>
Java时间和时间戳的相互转换
查看>>
Java对象序列化与反序列化
查看>>
multiprocess(上)
查看>>
第43条:返回零长度的数组或者集合,而不是null
查看>>
homework-10
查看>>
1123: 零起点学算法30——参加程序设计竞赛
查看>>
jquery中this和$(this)使用的地方
查看>>
洛谷P4557 [JSOI2018]战争(闵可夫斯基和+凸包)
查看>>
洛谷P4151 [WC2011]最大XOR和路径(线性基)
查看>>
[bzoj 2456]mode
查看>>