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"

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

你可能感兴趣的:(Javascript面试题解析)