一些javascript一些題目的解析
更新時(shí)間:2010年12月25日 22:59:06 作者:
今天做了群友發(fā)的一個(gè)鏈接, 關(guān)于js 的一些題目的. 這樣的題目常常有很多陷阱在里面,等著別人去踩. 很不幸,灑家踩了, 還蠻悲劇.
http://perfectionkills.com/javascript-quiz/
下面是我關(guān)于這些題目的,一些關(guān)于自己的理解. 如果有什么不同的意見(jiàn)或者見(jiàn)解,歡迎拍磚.
(function(){
return typeof arguments;
})();
這個(gè)題目比較簡(jiǎn)單, 只要大家不覺(jué)得 arguments 是 array ,就可以了.
返回是 object.
var f = function g(){ return 23; };
typeof g();
翻翻 aiming 的書,會(huì)發(fā)現(xiàn)里面對(duì)function 的解釋, 以及幾種創(chuàng)建方式有比較完全的描敘的, 這個(gè)陷阱,在下面的多個(gè)題目中有出現(xiàn). 小心.
返回是 undefined.
(function(x){
delete x;
return x;
})(1);
Javascript 的delete, 刪除的不是引入或者指向的對(duì)象. 而是對(duì)象本身.
/*
資料
delete 運(yùn)算符
從對(duì)象中刪除一個(gè)屬性,或從數(shù)組中刪除一個(gè)元素。
delete expression
expression 參數(shù)是一個(gè)有效的 JScript 表達(dá)式,通常是一個(gè)屬性名或數(shù)組元素
所以,這里的形參的改變, 與他是沒(méi)關(guān)系的.
*/
關(guān)于delete的具體解析,有園友給出了那個(gè)題目部分原本的解釋,粗心了沒(méi)去看,呵呵
http://perfectionkills.com/understanding-delete/
返回 1.
var y = 1, x = y = typeof x;
x;
這個(gè)部分有個(gè)小陷阱. 呵呵.
x= undefined , 大家知道. 然后 typeof x, 實(shí)際上也就是 typeof "undefined". 呵呵
返回的,當(dāng)然是 string 了.
(function f(f){
return typeof f();
})(function(){ return 1; });
恩, 陷阱又來(lái)拉.哈哈. 此f 是什么呢? 于形參是沒(méi)關(guān)系的,而且,你也取不到的.
所以, 形參沒(méi)任何改變.
所以, 返回 number .
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
這個(gè)地方. 主要是考慮的 this的上下文. 傳入的是 foo.bar,而非他的父級(jí).
所以, 返回 undefined .
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
有了上面那個(gè)題目, 這個(gè)題目也就可以理解了.
所以, 返回 undefined .
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
這里, 考究的是 () 的返回. () 是返回最后一個(gè).
返回 Number.
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
if 里的東西,是肯定可以執(zhí)行的.因?yàn)樗且粋€(gè)實(shí)際的存在(object). 非null|underfined的對(duì)象,在if下都是可以繼續(xù)的 . 但是, 和上面的都是一樣的原理, f ,卻是不存在的.
所以 返回 1undefined.
var x = [typeof x, typeof y][1];
typeof typeof x;
這里 ,typeof y ,undefined. 然后, typeof typeof undefined => vtypeof "undefined"
返回 "string".
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
呵呵, 這里是個(gè)小陷阱, 如果看得太快了容易進(jìn)去的哦.
簡(jiǎn)單的描敘下, var fo = {foo:{bar:1}}; function(foo){})(fo);
return typeof foo.bar ==> return typeof fo.bar
所以返回 "undefined".
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
這個(gè)題目, 是關(guān)于編譯器對(duì)function的解析了. 于return 沒(méi)關(guān)系. 當(dāng)他把return 只看成一個(gè)string的時(shí)候, 編譯器已經(jīng)解析過(guò)了所有的function . 與var f = function(){} 這樣的是不同的.
所以, 會(huì)返回 2.
function f(){ return f; }
new f() instanceof f;
這個(gè)地方理解不夠, 瓶子給出的解釋貌似看得過(guò)去
new f() 得到的是f 的本身, 而不是一個(gè)new的對(duì)象, 因此,不是f 的實(shí)例.
所以, 返回 false.
with (function(x, undefined){}) length;
關(guān)于 with 這塊, 如果我把 with也看成一個(gè)function(和想像alert一樣).
那這個(gè)length, 就是with的形參長(zhǎng)度了.
返回 2.
好了. 看來(lái)很多關(guān)于js的問(wèn)題, 其實(shí)還是需要梳理下的. aiming 大大的書,關(guān)于這部分的講解很給力. 可以讓人繞過(guò)一些陷阱和問(wèn)題.剩下的就是一些自己的測(cè)試了.
這些題目并不能夠完全的反映出一個(gè)人的js能力, 但是至少能夠讓人知道編譯器是怎么樣去處理js的
下面是我關(guān)于這些題目的,一些關(guān)于自己的理解. 如果有什么不同的意見(jiàn)或者見(jiàn)解,歡迎拍磚.
復(fù)制代碼 代碼如下:
(function(){
return typeof arguments;
})();
這個(gè)題目比較簡(jiǎn)單, 只要大家不覺(jué)得 arguments 是 array ,就可以了.
返回是 object.
復(fù)制代碼 代碼如下:
var f = function g(){ return 23; };
typeof g();
翻翻 aiming 的書,會(huì)發(fā)現(xiàn)里面對(duì)function 的解釋, 以及幾種創(chuàng)建方式有比較完全的描敘的, 這個(gè)陷阱,在下面的多個(gè)題目中有出現(xiàn). 小心.
返回是 undefined.
復(fù)制代碼 代碼如下:
(function(x){
delete x;
return x;
})(1);
Javascript 的delete, 刪除的不是引入或者指向的對(duì)象. 而是對(duì)象本身.
/*
資料
delete 運(yùn)算符
從對(duì)象中刪除一個(gè)屬性,或從數(shù)組中刪除一個(gè)元素。
delete expression
expression 參數(shù)是一個(gè)有效的 JScript 表達(dá)式,通常是一個(gè)屬性名或數(shù)組元素
所以,這里的形參的改變, 與他是沒(méi)關(guān)系的.
*/
關(guān)于delete的具體解析,有園友給出了那個(gè)題目部分原本的解釋,粗心了沒(méi)去看,呵呵
http://perfectionkills.com/understanding-delete/
返回 1.
復(fù)制代碼 代碼如下:
var y = 1, x = y = typeof x;
x;
這個(gè)部分有個(gè)小陷阱. 呵呵.
x= undefined , 大家知道. 然后 typeof x, 實(shí)際上也就是 typeof "undefined". 呵呵
返回的,當(dāng)然是 string 了.
復(fù)制代碼 代碼如下:
(function f(f){
return typeof f();
})(function(){ return 1; });
恩, 陷阱又來(lái)拉.哈哈. 此f 是什么呢? 于形參是沒(méi)關(guān)系的,而且,你也取不到的.
所以, 形參沒(méi)任何改變.
所以, 返回 number .
復(fù)制代碼 代碼如下:
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
這個(gè)地方. 主要是考慮的 this的上下文. 傳入的是 foo.bar,而非他的父級(jí).
所以, 返回 undefined .
復(fù)制代碼 代碼如下:
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
有了上面那個(gè)題目, 這個(gè)題目也就可以理解了.
所以, 返回 undefined .
復(fù)制代碼 代碼如下:
var f = (function f(){ return "1"; }, function g(){ return 2; })();
typeof f;
這里, 考究的是 () 的返回. () 是返回最后一個(gè).
返回 Number.
復(fù)制代碼 代碼如下:
var x = 1;
if (function f(){}) {
x += typeof f;
}
x;
if 里的東西,是肯定可以執(zhí)行的.因?yàn)樗且粋€(gè)實(shí)際的存在(object). 非null|underfined的對(duì)象,在if下都是可以繼續(xù)的 . 但是, 和上面的都是一樣的原理, f ,卻是不存在的.
所以 返回 1undefined.
復(fù)制代碼 代碼如下:
var x = [typeof x, typeof y][1];
typeof typeof x;
這里 ,typeof y ,undefined. 然后, typeof typeof undefined => vtypeof "undefined"
返回 "string".
復(fù)制代碼 代碼如下:
(function(foo){
return typeof foo.bar;
})({ foo: { bar: 1 } });
呵呵, 這里是個(gè)小陷阱, 如果看得太快了容易進(jìn)去的哦.
簡(jiǎn)單的描敘下, var fo = {foo:{bar:1}}; function(foo){})(fo);
return typeof foo.bar ==> return typeof fo.bar
所以返回 "undefined".
復(fù)制代碼 代碼如下:
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
這個(gè)題目, 是關(guān)于編譯器對(duì)function的解析了. 于return 沒(méi)關(guān)系. 當(dāng)他把return 只看成一個(gè)string的時(shí)候, 編譯器已經(jīng)解析過(guò)了所有的function . 與var f = function(){} 這樣的是不同的.
所以, 會(huì)返回 2.
復(fù)制代碼 代碼如下:
function f(){ return f; }
new f() instanceof f;
這個(gè)地方理解不夠, 瓶子給出的解釋貌似看得過(guò)去
new f() 得到的是f 的本身, 而不是一個(gè)new的對(duì)象, 因此,不是f 的實(shí)例.
所以, 返回 false.
with (function(x, undefined){}) length;
關(guān)于 with 這塊, 如果我把 with也看成一個(gè)function(和想像alert一樣).
那這個(gè)length, 就是with的形參長(zhǎng)度了.
返回 2.
好了. 看來(lái)很多關(guān)于js的問(wèn)題, 其實(shí)還是需要梳理下的. aiming 大大的書,關(guān)于這部分的講解很給力. 可以讓人繞過(guò)一些陷阱和問(wèn)題.剩下的就是一些自己的測(cè)試了.
這些題目并不能夠完全的反映出一個(gè)人的js能力, 但是至少能夠讓人知道編譯器是怎么樣去處理js的
相關(guān)文章
在JavaScript里嵌入大量字符串常量的實(shí)現(xiàn)方法
在JavaScript文件里嵌入大量字符串常量是經(jīng)常遇到的事。有時(shí)為了省事,就把一些界面的HTML和CSS直接寫在JS文件里2013-07-07
swiper動(dòng)態(tài)改變滑動(dòng)內(nèi)容的實(shí)現(xiàn)方法
假設(shè)當(dāng)前顯示的是1,往左滑動(dòng)一個(gè)遞減1,往右滑動(dòng)一個(gè)遞增1。下面通過(guò)實(shí)例代碼給大家講解swiper動(dòng)態(tài)改變滑動(dòng)內(nèi)容的實(shí)現(xiàn)方法,感興趣的朋友一起看看吧2018-01-01
編寫高質(zhì)量JavaScript代碼的基本要點(diǎn)
編寫高質(zhì)量JavaScript代碼的基本要點(diǎn)分享給大家,感興趣的小伙伴們可以參考一下2016-03-03
Javascript連接數(shù)據(jù)庫(kù)查詢并插入數(shù)據(jù)
這篇文章主要介紹了Javascript連接數(shù)據(jù)庫(kù)查詢并插入數(shù)據(jù),下面文章圍繞主題展開(kāi)詳細(xì)內(nèi)容,具有一的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-03-03

