好程式設計師Java教程分享JavaScript常見面試題一
好程式設計師 Java 教程分享 JavaScript常見面試題一:1. 使用 typeof bar === "object" 來確定 bar 是否是物件的潛在陷阱是什麼 ? 如何避免這個陷阱 ?
儘管 typeof bar === "object" 是檢查 bar 是否物件的可靠方法,令人驚訝的是在 JavaScript 中 null 也被認為是物件 !
因此,令大多數開發人員驚訝的是,下面的程式碼將輸出 true ( 而不是 false) 到控制檯:
var bar = null;console.log(typeof bar === "object"); // logs true!
只要清楚這一點,同時檢查 bar 是否為 null ,就可以很容易地避免問題:
console.log((bar !== null) && (typeof bar === "object")); // logs false
要答全問題,還有其他兩件事情值得注意:
首先,上述解決方案將返回 false ,當 bar 是一個函式的時候。在大多數情況下,這是期望行為,但當你也想對函式返回 true 的話,你可以修改上面的解決方案為:
console.log((bar !== null) && ((typeof bar === "object") || (typeof bar === "function")));
第二,上述解決方案將返回 true ,當 bar 是一個陣列 ( 例如,當 var bar = [];) 的時候。在大多數情況下,這是期望行為,因為陣列是真正的物件,但當你也想對陣列返回 false 時,你可以修改上面的解決方案為:
console.log((bar !== null) && (typeof bar === "object") && (toString.call(bar) !== "[object Array]"));
或者,如果你使用jQuery 的話:
console.log((bar !== null) && (typeof bar === "object") && (! $.isArray(bar)));
2. 下面的程式碼將輸出什麼到控制檯,為什麼 ?
(function(){ var a = b = 3;
})(); console.log("a defined? " + (typeof a !== 'undefined'));console.log("b defined? " + (typeof b !== 'undefined'));
由於 a 和 b 都定義在函式的封閉範圍內,並且都始於 var 關鍵字,大多數 JavaScript 開發人員期望 typeof a 和 typeof b 在上面的例子中都是 undefined 。
然而,事實並非如此。這裡的問題是,大多數開發人員將語句 var a = b = 3; 錯誤地理解為是以下宣告的簡寫:
var b = 3;var a = b;
但事實上,var a = b = 3; 實際是以下宣告的簡寫:
b = 3;var a = b;
因此( 如果你不使用嚴格模式的話 ) ,該程式碼段的輸出是:
a defined? falseb defined? true
但是, b 如何才能被定義在封閉函式的範圍之外呢 ? 是的,既然語句 var a = b = 3; 是語句 b = 3; 和 var a = b; 的簡寫, b 最終成為了一個全域性變數 ( 因為它沒有字首 var 關鍵字 ) ,因此仍然在範圍內甚至封閉函式之外。
需要注意的是,在嚴格模式下( 即使用 use strict) ,語句 var a = b = 3; 將生成 ReferenceError: b is not defined 的執行時錯誤,從而避免任何否則可能會導致的 headfakes /bug 。 ( 還是你為什麼應該理所當然地在程式碼中使用 use strict 的最好例子 !)
3. 下面的程式碼將輸出什麼到控制檯,為什麼 ?
var myObject = {
foo: "bar",};
myObject.func();
上面的程式碼將輸出以下內容到控制檯:
outer func: this.foo = bar
outer func: self.foo = bar
inner func: this.foo = undefined
inner func: self.foo = bar
在外部函式中, this 和 self 兩者都指向了 myObject ,因此兩者都可以正確地引用和訪問 foo 。
在內部函式中, this 不再指向 myObject 。其結果是, this.foo 沒有在內部函式中被定義,相反,指向到本地的變數 self 保持在範圍內,並且可以訪問。 ( 在 ECMA 5 之前,在內部函式中的 this 將指向全域性的 window 物件 ; 反之,因為作為 ECMA 5 ,內部函式中的功能 this 是未定義的。 )
4. 封裝 JavaScript 原始檔的全部內容到一個函式塊有什麼意義及理由 ?
這是一個越來越普遍的做法,被許多流行的JavaScript 庫 (jQuery , Node.js 等 ) 採用。這種技術建立了一個圍繞檔案全部內容的閉包,也許是最重要的是,建立了一個私有的名稱空間,從而有助於避免不同 JavaScript 模組和庫之間潛在的名稱衝突。
這種技術的另一個特點是,允許一個易於引用的( 假設更短的 ) 別名用於全域性變數。這通常用於,例如, jQuery 外掛中。 jQuery 允許你使用 jQuery.noConflict() ,來禁用 $ 引用到 jQuery 名稱空間。在完成這項工作之後,你的程式碼仍然可以使用 $ 利用這種閉包技術,如下所示:
(function($) { /* jQuery plugin code referencing $ */ } )(jQuery);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2661426/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java教程分享JavaScript常見面試題五程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題四程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題三程式設計師JavaScript面試題
- 好程式設計師Java教程分享JavaScript常見面試題二程式設計師JavaScript面試題
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享XML常見面試題程式設計師JavaXML面試題
- 好程式設計師Java教程分享Java面試常見技術難題程式設計師Java面試
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- 好程式設計師Java教程分享Java多執行緒常見面試題程式設計師Java執行緒面試題
- 好程式設計師Python教程分享常見的Python面試題程式設計師Python面試題
- 好程式設計師Python教程分享Python常見面試問題程式設計師Python面試
- 好程式設計師web前端教程分享Jquery常見面試題程式設計師Web前端jQuery面試題
- 好程式設計師web前端分享常見面試題程式設計師Web前端面試題
- 好程式設計師web前端教程分享JavaScript面試題程式設計師Web前端JavaScript面試題
- 好程式設計師web前端教程分享HTML/CSS部分常見面試題程式設計師Web前端HTMLCSS面試題
- 好程式設計師Java學習路線分享Spring常見面試題程式設計師JavaSpring面試題
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師分享Java常見面試題Tomcat最佳化經驗程式設計師Java面試題Tomcat
- 好程式設計師Java教程分享jsp相關面試題程式設計師JavaJS面試題
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題一程式設計師Linux面試
- 好程式設計師Java培訓分享Java多執行緒常見面試問題程式設計師Java執行緒面試
- Java程式設計師面試常見問題Java程式設計師面試
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- 好程式設計師web前端教程分享常見基礎面試題之效能最佳化程式設計師Web前端面試題
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題二程式設計師Linux面試
- 好程式設計師雲端計算教程分享Linux雲端計算面試常見問題三程式設計師Linux面試
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java分享Javamain十個面試題程式設計師JavaAI面試題
- 好程式設計師Java教程分享面試中Spring的技術問題程式設計師Java面試Spring
- 好程式設計師web前端分享HTML5常見面試題集錦五程式設計師Web前端HTML面試題
- 好程式設計師web前端分享HTML5常見面試題集錦四程式設計師Web前端HTML面試題
- 好程式設計師web前端分享HTML5常見面試題集錦三程式設計師Web前端HTML面試題
- 好程式設計師web前端分享HTML5常見面試題集錦二程式設計師Web前端HTML面試題
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師分享JavaScript中8個常見的陷阱程式設計師JavaScript
- VUE的面試題分享-好程式設計師Vue面試題程式設計師
- 好程式設計師web前端教程分享Vue.js面試題程式設計師Web前端Vue.js面試題