JavaScript Perfection kill 測試及答案
更新時間:2010年03月23日 16:42:45 作者:
近日,在Perfection kill上看到有關(guān)javascript quiz。并做了一下,最終錯了2個(#2,#9),但是,這2道題,在Ie和ff下的答案是不一樣的?!
下面是選擇題:官方地址是 http://perfectionkills.com/javascript-quiz/
1.
(function(){
return typeof arguments;
})();
“object”
“array”
“arguments”
“undefined”
2.
var f = function g(){ return 23; };
typeof g();
“number”
“undefined”
“function”
Error
3.
(function(x){
delete x;
return x;
})(1);
1
null
undefined
Error
4.
var y = 1, x = y = typeof x;
x;
1
“number”
undefined
“undefined”
5.
(function f(f){
return typeof f();
})(function(){ return 1; });
“number”
“undefined”
“function”
Error
6.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
“undefined”
“object”
“number”
“function”
7.
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
“undefined”
“object”
“number”
“function”
8.
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
“string”
“number”
“function”
“undefined”
9.
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
1
“1function”
“1undefined”
NaN
10.
var x = [typeof x, typeof y][1];
typeof typeof x;
“number”
“string”
“undefined”
“object”
11.
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
“undefined”
“object”
“number”
Error
12.
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
Error (e.g. “Too much recursion”)
undefined
13.
function f(){ return f; }
new f() instanceof f;
true
false
14.
with (function(x, undefined){}) length;
undefined
Error
下面是個人的解答:
// Q1
(function(){
return typeof arguments; //很顯然這里應(yīng)該返回的是 "object"
})();
// Q2
var f = function g(){ return 23; };
typeof g(); //在ie下,這里返回的是 "number",但是在ff下,卻是Error(g未定義)
// Q3
(function(x){
delete x; //應(yīng)該說局部變量是不能被delete的
return x; //所以這里返回1
})(1);
/*
贈送:
delete與變量,有以下關(guān)系:
1、對象預(yù)定義的屬性是不能被delete的;2、通過prototype指定的屬性是不能delete的
//關(guān)于2,可以理解成只能刪除動態(tài)附加給對象實例的屬性?
3、var定義的(我個人理解是局部變量)是不能被delete的;4、function定義的變量及參數(shù)(相當(dāng)于局變量)是不能被刪除的。
關(guān)于delete的介紹,這里有:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
*/
// Q4
var y = 1, x = y = typeof x;
x; //很顯然,x應(yīng)該是undefined
// Q5
(function f(f){
return typeof f(); //這里的f指的是傳進來的匿名函數(shù),因此應(yīng)該是 "number" (也就是1)
})(function(){ return 1; });
// Q6
var foo = {
bar: function() { return this.baz; },
//但是,調(diào)用后,這里的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的,號操作符,被調(diào)用的是第2個函數(shù),因此返回的是"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是字符串,因此應(yīng)該是 "string"
// Q11
(function(foo){
return typeof foo.bar;
//非常隱暗的一道題,參數(shù)foo指向的是傳進來的json對象,而json對象又有個foo屬性。
//因此,此處如果是 typeof foo.foo.bar的話就是"number"
//但,參數(shù)foo本身是沒有bar屬性的,因此是 "undefined"
})({ foo: { bar: 1 } });
// Q12
(function f(){
function f(){ return 1; }
return f(); // 函數(shù)定義,后者覆蓋前者,因此是 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的形參個數(shù),因此是 2
復(fù)制代碼 代碼如下:
1.
(function(){
return typeof arguments;
})();
“object”
“array”
“arguments”
“undefined”
2.
var f = function g(){ return 23; };
typeof g();
“number”
“undefined”
“function”
Error
3.
(function(x){
delete x;
return x;
})(1);
1
null
undefined
Error
4.
var y = 1, x = y = typeof x;
x;
1
“number”
undefined
“undefined”
5.
(function f(f){
return typeof f();
})(function(){ return 1; });
“number”
“undefined”
“function”
Error
6.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
“undefined”
“object”
“number”
“function”
7.
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
“undefined”
“object”
“number”
“function”
8.
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
“string”
“number”
“function”
“undefined”
9.
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
1
“1function”
“1undefined”
NaN
10.
var x = [typeof x, typeof y][1];
typeof typeof x;
“number”
“string”
“undefined”
“object”
11.
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
“undefined”
“object”
“number”
Error
12.
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
Error (e.g. “Too much recursion”)
undefined
13.
function f(){ return f; }
new f() instanceof f;
true
false
14.
with (function(x, undefined){}) length;
undefined
Error
下面是個人的解答:
復(fù)制代碼 代碼如下:
// Q1
(function(){
return typeof arguments; //很顯然這里應(yīng)該返回的是 "object"
})();
// Q2
var f = function g(){ return 23; };
typeof g(); //在ie下,這里返回的是 "number",但是在ff下,卻是Error(g未定義)
// Q3
(function(x){
delete x; //應(yīng)該說局部變量是不能被delete的
return x; //所以這里返回1
})(1);
/*
贈送:
delete與變量,有以下關(guān)系:
1、對象預(yù)定義的屬性是不能被delete的;2、通過prototype指定的屬性是不能delete的
//關(guān)于2,可以理解成只能刪除動態(tài)附加給對象實例的屬性?
3、var定義的(我個人理解是局部變量)是不能被delete的;4、function定義的變量及參數(shù)(相當(dāng)于局變量)是不能被刪除的。
關(guān)于delete的介紹,這里有:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
*/
// Q4
var y = 1, x = y = typeof x;
x; //很顯然,x應(yīng)該是undefined
// Q5
(function f(f){
return typeof f(); //這里的f指的是傳進來的匿名函數(shù),因此應(yīng)該是 "number" (也就是1)
})(function(){ return 1; });
// Q6
var foo = {
bar: function() { return this.baz; },
//但是,調(diào)用后,這里的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的,號操作符,被調(diào)用的是第2個函數(shù),因此返回的是"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是字符串,因此應(yīng)該是 "string"
// Q11
(function(foo){
return typeof foo.bar;
//非常隱暗的一道題,參數(shù)foo指向的是傳進來的json對象,而json對象又有個foo屬性。
//因此,此處如果是 typeof foo.foo.bar的話就是"number"
//但,參數(shù)foo本身是沒有bar屬性的,因此是 "undefined"
})({ foo: { bar: 1 } });
// Q12
(function f(){
function f(){ return 1; }
return f(); // 函數(shù)定義,后者覆蓋前者,因此是 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的形參個數(shù),因此是 2
相關(guān)文章
微信小程序中this.data與this.setData的區(qū)別詳解
這篇文章主要給大家介紹了關(guān)于微信小程序中this.data與this.setData區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-09-09Javascript數(shù)組及類數(shù)組相關(guān)原理詳解
這篇文章主要介紹了Javascript數(shù)組及類數(shù)組相關(guān)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10tsc性能優(yōu)化Project References使用詳解
這篇文章主要為大家介紹了tsc性能優(yōu)化Project References使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11JavaScript中undefined和null的區(qū)別
這篇文章主要介紹了 JavaScript中undefined和null的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-05-05給easyui的datebox控件添加清空按鈕的實現(xiàn)方法
下面小編就為大家?guī)硪黄oeasyui的datebox控件添加清空按鈕的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11javascript觸發(fā)模擬鼠標(biāo)點擊事件
這篇文章主要介紹了javascript觸發(fā)模擬鼠標(biāo)點擊事件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-06-06原生JS版和jquery版實現(xiàn)checkbox的全選/全不選/點選/行內(nèi)點選(Mr.Think)
腳本之家小編之前整理不少checkbox全選全不選這方便的文章,但看了這篇以后發(fā)現(xiàn)實現(xiàn)方法更好2016-10-10