几道常见面试 JavaScript Quiz 解析

作者: 三万三

豆皮粉儿,又见面啦!今天字节跳动数据平台的”三万三”面试官给大家带来一篇JavaScript Quiz 问题解析,在准备面试的小伙伴们,赶紧一起来加入测试吼!!!

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”240″ data-rawheight=”240″ data-thumbnail=”https://pic3.zhimg.com/v2-d33da4e4c46589dd35bd24c363573212_b.jpg” width=”240″ data-actualsrc=”https://pic3.zhimg.com/v2-d33da4e4c46589dd35bd24c363573212_b.gif”>

图片

测试问题来源: http://perfectionkills.com/javascript-quiz/
推荐读者先去上面链接测试得分,再看下面的解析,看看你和作者(字节常驻面试官)有什么理解差异哦

1

(function(){

• “object”
• “array”
•”arguments”
•”undefined”

arguments 是个类数组对象,所以会返回 ‘object’,关于 arguments 还有几个注意事项:

  1. arguments 有 length 属性,但是没有其他数组的方法比如 pop, push 等,可以用 Array.from(arguments) 或者 […arguments] 把它转化为真实的数组2. 箭头函数内部没有 arguments 这个对象3. 如果条件允许,优先考虑使用 rest parameter 语法4. 严格模式下 arguments 的行为会有一些变化

2

var f = function g(){ return 23; };

•”number”
•”undefined”
•”function”
•Error

var f = xx 是一个语句,不是一个函数表达式,函数表达式的名字只在内部可见,外部 g 是不存在的,所以执行会报错

3

(function(x){

•1
•null
•undefined
•Error

delete 操作符非常特殊,它可以删除对象的属性,但是无法删除变量,比如

var x = 1;

所以这里 x 是删除不掉的,返回还是 1,关于 delete 更详细的可以看这里 http://perfectionkills.com/understanding-delete/

4

var y = 1, x = y = typeof x;

•1
•”number”
•undefined
•”undefined”

赋值运算符从右往左执行,所以 结果是 undefined

5

(function f(f){

•”number”
•”undefined”
•”function”
•Error

这一题比较简单,看清楚是哪个 f 就可以了,函数内部的 f 是传递进去的参数 f,而传递进去的函数执行完返回 1,而 typeof 1 的结果是 number

6

var foo = {

•”undefined”•”object”•”number”•”function”

这一题的关键是 foo.bar 执行时 this 的指向问题,可以先看一下下面2个的结果:

var foo = {

把 foo.bar 传递进去之后执行时,this 已经不指向 foo 了,所以baz是不存在的,结果是 undefined,如果上面的代码是在 严格模式下,情况会有一些不同,可以自己试验一下

7

var foo = {

•”undefined”
•”object”
•”number”
•”function”

看了上面那个题,这个就很容易解答了

8

var f = (function f(){ return "1"; }, function g(){ return 2; })();

•”string”
•”number”
•”function”
•”undefined”

这里其实考察的是逗号表达式的值,逗号表达式以最右边的值为准,所以结果是 number,平时写代码可别手抖了

9

var x = 1;

•1
•”1function”
•”1undefined”
•NaN

这个问题比较复杂,具体细节需要看规范,简单的讲 if 里面的 f 声明完就不存在了,所以结果是 “1undefined”

10

var x = [typeof x, typeof y][1];

•”number”
•”string”
•”undefined”
•”object”

还是考察逗号表达式,结果就显而易见了

11

(function(foo){

•”undefined”
•”object”
•”number”
•Error

这个题要仔细审题,注意不要踩坑就不会答错

12

(function f(){

•1
•2
Error (e.g. “Too much recursion”)
•undefined

这个考察的是变量提升,很简单

13

function f(){ return f; }

•true
•false

这个题考察的是 构造函数返回值的问题,如果构造函数返回的是简单值,比如 string, number,那么 new 之后返回的还是一个新的实例,但是如果构造函数返回的是 对象或者别的函数,那 new 之后返回的就是 当初的值,所以这里 instanceof 的结果很显然就得出来了

14

with (function(x, undefined){}) length;

•1
•2
•undefined
•Error

这里考察2个知识点,with 和 函数的 length,with 语句会把代码的作用域设置到一个特定的对象上,而函数的 length 是函数声明的时候的参数的个数,所以答案就呼之欲出了~

The End

<img src="data:image/svg+xml;utf8,” data-caption=”” data-size=”normal” data-rawwidth=”516″ data-rawheight=”258″ data-thumbnail=”https://pic3.zhimg.com/v2-ad62d7a2f0db827c8ee16ee3b418b076_b.jpg” width=”516″ data-original=”https://pic3.zhimg.com/v2-ad62d7a2f0db827c8ee16ee3b418b076_r.jpg” data-actualsrc=”https://pic3.zhimg.com/v2-ad62d7a2f0db827c8ee16ee3b418b076_b.gif”>