JavaScript测试及答案

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

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

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

下面是个人的解答:

---

 

ExpandedBlockStart.gif 代码
//  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

 

 

转载于:https://www.cnblogs.com/McJeremy/archive/2010/03/19/1689622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值