zoukankan      html  css  js  c++  java
  • JavaScript测试及答案

    近日,在Perfection kill上看到有关javascript quiz。并做了一下,

    最终错了2个(#2,#9),但是,这2道题,在Ie和ff下的答案是不一样的?!

    附上测试地址:http://perfectionkills.com/javascript-quiz/

    下面是个人的解答:

    ---

    代码
    // Q1
    (function(){ 
          
    return typeof arguments;  //很显然这里应该返回的是 "object"
    })();
    // Q2
    var f = function g(){ return 23; };
    typeof g(); //在ie下,这里返回的是 "number",但是在ff下,却是Error(g未定义)
    //
     Q3
    (function(x){
          
    delete x; //应该说局部变量是不能被delete的
          return x; //所以这里返回1
    })(1);
    /*
    赠送:
    delete与变量,有以下关系:
    1、对象预定义的属性是不能被delete的;2、通过prototype指定的属性是不能delete的
    //关于2,可以理解成只能删除动态附加给对象实例的属性?
    3、var定义的(我个人理解是局部变量)是不能被delete的;4、function定义的变量及参数(相当于局变量)是不能被删除的。
    关于delete的介绍,这里有:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
    */
    // Q4
    var y = 1, x = y = typeof x;
    x;  
    //很显然,x应该是undefined
    //
     Q5
     (function f(f){ 
          
    return typeof f();  //这里的f指的是传进来的匿名函数,因此应该是 "number" (也就是1)
     })(function(){ return 1; });
    // Q6
     var foo = { 
          bar: 
    function() { return this.baz; },  
    //但是,调用后,这里的this指向了bar,而bar是没有baz属性的,因此是undefined
          baz: 1
        };
        (
    function(){ 
          
    return typeof arguments[0](); //arguments[0]是foo.bar
        })(foo.bar);
    // Q7
      var foo = {
          bar: 
    function(){ return this.baz; },  //同第6题
          baz: 1
        }
        
    typeof (f = foo.bar)();
    // Q8
        var f = (function f(){ return "1"; }, function g(){ return 2; })();
        
    //js的,号操作符,被调用的是第2个函数,因此返回的是"number"
        typeof f;
    // Q9
        var x = 1;
        
    if (function f(){}) {
          x 
    += typeof f;  //ie下是 1function、ff下是1undefined
        }
        x;
    // Q10
        var x = [typeof x, typeof y][1]; //x="undefined"
        typeof typeof x; //x是字符串,因此应该是 "string"
    //
     Q11
        (function(foo){
          
    return typeof foo.bar;
       
    //非常隐暗的一道题,参数foo指向的是传进来的json对象,而json对象又有个foo属性。
        //因此,此处如果是 typeof foo.foo.bar的话就是"number"
    //
    但,参数foo本身是没有bar属性的,因此是 "undefined"
        })({ foo: { bar: 1 } });
    // Q12
       (function f(){
          
    function f(){ return 1; }
          
    return f();  // 函数定义,后者覆盖前者,因此是 2
          function f(){ return 2; }
        })();
    // Q13
        function f(){ return f; }
        
    new f() instanceof f;  
        //new f()实际上和f是同一个东西,都是function,因此,两者是==,因此是false
        //如果function f(){return 1;},那么返回的是object
    //
     Q14
         with (function(x, undefined){}) length;
        
    //这样写就明白了 with(function(x,undefined){}){length;}
     //而length,指是的function的形参个数,因此是  2
    <h3>
       心静似高山流水不动,心清若巫峰雾气不沾。
    </h3>
  • 相关阅读:
    Netty源码解析 -- 内存对齐类SizeClasses
    Netty源码解析 -- 零拷贝机制与ByteBuf
    Netty源码解析 -- ChannelOutboundBuffer实现与Flush过程
    Netty源码解析 -- ChannelPipeline机制与读写过程
    Oracle体系结构概述与SQL解析剖析
    SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期
    SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期
    shiro入门学习--授权(Authorization)|筑基初期
    shiro入门学习--使用MD5和salt进行加密|练气后期
    Shiro入门学习---使用自定义Realm完成认证|练气中期
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1689622.html
Copyright © 2011-2022 走看看