代码改变世界

前端笔试题及资料集锦(二)

2014-09-16 14:49  大额_skylar  阅读(2007)  评论(14编辑  收藏  举报

一.(2014阿里巴巴校招在线笔试)

 题目:请选择出前端页面开发,执行javascript代码alert(1)的代码:

           1.<iframe src="javascript:alert(1);"></iframe>

           2.<img src=""/onerror=alert(1);>

     3.<s style="top:expression(alert(1))"></s>

     4.<div onclick="alert(1)"></div>

 

分析:事实证明1,2,3都可以,just try...

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>demo</title>
 6 </head>  
 7 <style>  
 8  
 9 </style>  
10     
11 <body>
12  <!-- 成功alert(1) -->
13  <!-- <iframe src="javascript:alert(1);"></iframe> -->
14  <!-- 成功alert(1) -->
15  <!-- <img src=""/onerror=alert(1);> -->
16  <!-- ie下兼容性视图成功alert(1) -->
17  <!--  <s style="top:expression(alert(1))"></s> -->
18  <!-- 没有alert(1) -->
19  <div onclick="alert(1)"></div>
20 
21     
22 </body>  
23 </html>

 

二、(2014阿里巴巴校招在线笔试)

题目:请指出以下哪些是ECMAScript5新增的特性:

  1.Object.hasOwnProperty()

  2.Object.create

  3.Object.preventExtensions

  4.Object.isExtensible

 

分析:资料表明,2,3,4都是新增的特性;

       这个题目充分的说明了,我们要关注新的东西喔~~~

参考资料:http://blog.csdn.net/kabukon/article/details/6913381

 

三、下面代码会返回什么

      

(function(){
        return typeof arguments;
       })();

分析:

       arguments是实参集合,有数组长度,没有数组方法,typeof会返回对象。

       于是乎,上面的代码会返回“object”。

 

四、看下面代码

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

分析:

      这里面的表达式是有名函数表达式,不规范,g()只能在函数内部访问。

      typeof就会Error。

 

五、下面代码return会返回什么

1 (function(x){
2          delete x;
3          return x;
4        })(1);

分析:

    delete不能删除变量和参数,只能删除对象下面的属性,因此return还是会返回1。

 

六、下面代码中的 x

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

分析:

      后面表达式是从右向左执行的,typeof返回的都是字符串类型,最先运算的是typeof x,因为他先是'undefined'所以赋给了y,y再赋给x,于是乎最后就是'undefined'了。

 

七、下面函数会返回什么

1 (function f(f){
2            return typeof f();
3        })(function(){return 1;});

分析:

    相当于typeof 1 然后会返回 'number' 

 

八、下面代码会返回什么:

1 var foo = {
2          bar:function(){return this.baz;},
3          baz:1
4        } ;
5        (function(){
6           return typeof arguments[0]();
7        })(foo.bar);

分析:

      先看个例子:

1 function test(){
2         alert(this);
3       }

    其实这样写的话这里面的this根本就是不确定的,也就不会弹窗,this指向哪要看在哪调用

   像这样写:

  

1 var arr = [1,2,3];
2       arr.test = test;
3       arr.test();

    就会弹窗数组了喔。

    所以,本题中,foo中的this指向是不明确的,要看调用的地方,向foo.bar这样调用的话this是会指向foo的,但是foo.bar是整体作为参数传进去的,arguments[0]就相当于foo.bar,整体都作为函数名了,于是 arguments[0]()这种调用方式就相当于

function test(){

alert(this);
}

上面说的这种调用方式了,也就是说this指向window了,window中没有baz,于是就会
会返回'undefined'了。

 

九、下面的typeof f 会得到什么:

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

分析:

     这里面首先有了分组选择符,我们先看看什么事分组选择符吧:

      正常来说 var a = 1; 那么a就是1,但是如果这样写 var a = (1,2,3); 那么a就是3了,分组选择符执行最后一位。

      于是就执行分组选择符后面那个return 2的函数了,于是typeof f就是 'number'。

 

十、看下面代码中的x

1 var x =1;
2       if(function f(){}){
3          x += typeof f;
4       }
5       x;

分析:

    function f(){}这样的函数必须是全局的或者是局部的,是不能写在运算里面的,于是下面f找不到 typeof f返回'undefined',f虽然找不到,但是在if里面还是会返回真。于是变成了运算1+'undefined',然后就会返回'1undefined'了




十一、

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

分析:

      很迷惑,其实根本不用管第一个表达式。typeof返回的必然是个字符串,于是typeof一个字符串了,于是就返回'string'。

 

十二、看下面的代码

1 (function(foo){
2        return typeof foo.bar;
3  })({foo:{bar:1}});

分析:

     其实这里面的foo并不是指后面传进的参数中的foo,而是指整个参数{foo:{bar:1}}这个对象,但是这个对象中根本不存在bar属性,所以就会返回'undefined'了。

 

十三、下面代码会return什么

 (function f(){
           function f(){return 1;}
           return f();
           function f(){return 2;}
       })();

 

   分析:

       函数声明预解析,后面函数已经把前面的覆盖掉了于是在执行f()的时候就是后面那个函数了,于是就返回2了。

 

十四、看下面代码

1 function  f(){return f;}
2 new f() instanceof f;

分析:  

      只看后面的表达式的话new f()就是构造函数生成的对象然后他去instanceof构造函数,然后就返回true了。但是有return f  于是f覆盖掉new f()这个生成的对象了,于是就变成了f instanceof f了,然后就会返回false了。

 

十五、

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

分析:

     函数的长度(length)就是函数的形参,而arguments是函数的实参集合

     比如说这样的
    function test(num1,num2,num3){}
    alert(test.length);
    就会弹出3

    同理,本题就会得到2.