Javascript面试题解析

Javascript的一些面试题让很多同学感到头疼,下面就根据兄弟连教育(www.lampbrother.net)毕业学员面试遇到的面试题,给大家做一个简单的分享,希望对初入职场的你们有一些帮助: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);

时间: 2024-10-14 07:35:39

Javascript面试题解析的相关文章

一个javascript面试题解析

var length = 10; function fn(){ console.log(this.length); } var obj = { length: 5, method: function (fn) { fn(); // 10 // 实际上,最终的结果:获取的是 实参的个数! arguments[0](); //// 结果:3 // 此时,就是作为对象的方法来调用的,所以,此时, // 函数内部的this就指向了当前的对象! // 最终获取到的就是:arguments.length,获

深入理解 js this 绑定 ( 无需死记硬背,尾部有总结和面试题解析 )

js 的 this 绑定问题,让多数新手懵逼,部分老手觉得恶心,这是因为this的绑定 '难以捉摸',出错的时候还往往不知道为什么,相当反逻辑.让我们考虑下面代码: var people = { name : "海洋饼干", getName : function(){ console.log(this.name); } }; window.onload = function(){ xxx.onclick = people.getName; }; 在平时搬砖时比较常见的this绑定问题,

计算机网络高频面试题解析(含书籍推荐)

网络原理是工程师的必须了解的计算机基础知识,先推荐下两本好书,<图解HTTP>和<图解TCP/IP>. <图解TCP/IP>讲解网络基础知识.TCP/IP基础知识.数据链路.IP协议.IP协议相关技术.TCP与UDP.路由协议.应用协议.网络安全等内容,<图解HTTP>对HTTP协议进行了全面系统的介绍,这两本书的特点都是在讲解的同时,配上了大量漫画通信图例,读起来比较轻松. 高频面试题解析 1.OSI七层网络模型的结构与功能 OSI是一个开放性的通信系统互

Java中有关构造函数的一道笔试题解析

Java中有关构造函数的一道笔试题解析 1.具体题目如下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 2.解析说明 (1)class中的构造函数是可以省略的 /** * @Title:User.java * @Package:com.you.user.model * @Descrip

javascript的预解析与变量提升

JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,JavaScript有“预解析”行为.理解这一特性是很重要的,不然在实际开发中你可能会遇到很多无从解析的问题,甚至导致程序bug的存在.为了解析这一现象,也作为自己的一次学习总结,本文逐步引导你来认识JavaScript“预解析”,如果我的见解有误,还望指正. (1)如果JavaScript仅是运行时自上往下

.NET面试题解析(04)-类型、方法与继承

  系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 做技术是清苦的.一个人,一台机器,相对无言,代码纷飞,bug无情.须梦里挑灯,冥思苦想,肝血暗耗,板凳坐穿.世界繁华竞逐,而你独钓寒江,看尽千山暮雪,听彻寒更雨歇.——来自<技术人的慰藉> 常见面试题目: 1. 所有类型都继承System.Object吗? 2. 解释virtual.sealed.override和abstract的区别 3. 接口和类有什么异同? 4. 抽象类和接口有什么区别?使用时

javascript 面试题

面试题: 1.下面代码运行结果 var bl = false; $.ajax(url, { //... success: function(){ bl = true; } }); while ( !bl ) { alert( bl ); } alert( bl ); // 结果大家自己去想,这道题是面试官临时写的,简单直接,很好的考察你是否理解javascript中的运行机制,很棒的一道面试题 2.扩展Array原型,编写一个去除数组重复项的方法 // 算法一,两层循环,性能差 Array.pr

嵌入式linux面试题解析(二)——C语言部分二

嵌入式linux面试题解析(二)--C语言部分二 1..h头文件中的ifndef/define/endif 的作用?    答:防止该头文件被重复引用. 2.#include 与 #include "file.h"的区别?    答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h. 3.描述实时系统的基本特性    答 :在特定时间内完成特定的任务,实时性与可靠性. 4.全局变量和局部变量在内存中是否有区别?如果有,是

嵌入式linux面试题解析(一)——ARM部分二

嵌入式linux面试题解析(一)--ARM部分二 1.描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别. 基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有重定位的操作: 基于ROM:没有上面的操作. 基于ROM:速度较基于RAM的慢,因为会有一个把变量,部分代码等从存储器(硬盘,flash)搬移到RAM的过程:可用RAM资源比基于RAM的多: 基于RAM:速度较基于ROM的快,可用RAM比基于ROM的少,因为所有的代码,数据都必须存放在RAM中.