JavaScript測試及答案

來源:互聯網
上載者:User

近日,在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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.