Javascript觀念、陷阱與深入研究站內文章收集
- 詳細內容
- 分類:Javascript
- 發佈:2013-04-04, 週四 23:20
- 點擊數:2059
我發現要在網站裡找到一些想要的文章的真不容易,
可是分類太多又不好,
所以弄了這篇來收集這部落格內一些關於觀念、陷阱與深入研究的文章
這樣我自己找文章也方便,希望大家也有所幫助:
Javascript觀念、陷阱與深入研究:
粗談hoisting... |
hoisting 中文是提升的意思。 在 javascript 中 hoisting 指的是 " 一種把宣告提升到其所在區域內頂端的行為"。 意思是,可以在宣告變數前就使用變數。 不過提升行為僅僅只針對宣告部分,對於變數的指定,並沒有跟著被提升。 |
for in 列舉陣列(Array)的危險陷阱 |
一般而言,我們使用for來重複操作陣列,使用for in 來列舉物件屬性。 但for in 也不是不能操作陣列,只是這種作法有陷阱存在。 原因出在於對物件屬性的擴充,這會造成for in在操作陣列時,將擴充屬性也當成陣列內容列舉出來。 讓我們看看下面的例子。 |
一個for迴圈操作陣列的效率問題 |
Stoyan Stefanov在 Javascript 設計模式中提到一個for迴圈操作陣列的效率問題, 一般我們在使用for迴圈來操作陣列時,通常都會使用到陣列的長度, 像是這樣: |
字串物件三種擷取子字串方法的差異 |
其中string.substr()是最不一樣的, string.substr()是藉由起始索引位置與子字串長度來擷取子字串。 語法:string.substr(start,length) 如果start是負值,會變成從字尾往前讀, 不過不是所有瀏覽器都支援,所以最好別這樣用。 |
字串合併的效率問題 |
在做字串合併時,很多人都喜歡用+運算子來進行運算。 但似乎有不少人認為這種作法效率不彰,不是個好的作法,使用array.join()倒是個比較推崇的方法。 其實,不盡然如此。 在進行小量字串合併時,效率從來就不是考慮的重點,怎麼寫都沒關係,運作正常才是重點。 但是在進行大量字串合併時,效率就是個問題。 |
動態載入CSS |
一般載入css檔的方式就是在<head>中使用<link>來宣告要載入的文件。 而事實上<link>也只能在<head>中使用。 那如何在網頁當中選擇要載入的css檔呢? 下面這範例示範如何動態載入檔名為style.css的css檔: |
script標籤的非同步與延遲執行 |
在HTML5中,script標籤多了許多屬性,async 就是其中之一。 async屬性可以讓javascript進行非同步的載入跟執行,而不會停止網頁其他部分的載入與解析。 這種讓外部js擋在背景載入與執行的方法,大大的提升了網頁載入與執行的效能。 雖然只適用於外部js檔,但實用性相當高,以後網頁要添加一些小工具,像是月曆之類的。 也就不用過於害怕添加太多而導致網頁載入被拖垮了。 |
關於script標籤的 defer 屬性 |
談論到網站的載入速度,javascript的延遲載入似乎是很常被提到的課題。 事實上確實也是個舉足輕重的地方,所謂"延遲載入做得好,網頁速度沒煩惱!" 好啦!誇張了,進入主題吧! 網路上琳琅滿目的延遲載入方式,看得眼花撩亂,當然難免有些會讓人誤解的地方。 |
ECMA-262中文翻譯 4.2.1 Object 物件 |
ECMA腳本語言並不使用類別,這一點與C++,Smalltalk 或是Java等物件導向語言是不一樣的。雖然沒有類別的存在,ECMA腳本語言依然可以透過各種不同的方法來建立物件。其中包含了使用實字表示法(literal notation)或是藉由建構子(constructors )來建立物件,並且執行程式碼,這些程式碼可以用來初始化部分或者全部的物件屬性,初始化的方式是指定初始值給物件屬性。每個建構子都是一個函式,並且擁有一個名叫做"原型" (prototype)的屬性,原型可以用來實現"基於原型" (prototype-based )的繼承,和共享屬性。 |
encodeURI() 為什麼URI要編碼? |
encodeURI 可以為URI編碼,使其符合URI規範。URI是Uniform Resource Identifier 的縮寫,中文翻譯為 "統一資源標誌符" 。 為什麼要對URI編碼,什麼時候用的到URI編碼? 如果對URI編碼很陌生,那我們先來看個例子,看看URI編碼跟我們有多常接觸。 先打開google的網頁: |
escape,encodeURI與encodeURIComponent 的使用與差異 |
escape()、encodeURI()、encodeURIComponent ()都是用來對字串做編碼,以利於在網路上傳遞。 escape() :escape()是個全域函式,可以在javascript程式的任何地方呼叫它。使用16進制替字串重新編碼, 解碼時使用unescape()函式。escape()當初存在的目的是為了字串的可攜性, |
javascript沒有sleep跟delay |
javascript沒有sleep跟delay一般都是用setTimeout或是setInterval來執行需要延遲的程式。 不過也不是沒有辦法模擬出sleep或是delay的功能。 一般而言都是使用無窮迴圈跟Date物件配合。 程式碼可以這樣寫: |
邏輯運算子 || (OR) 跟 &&(AND) 的傳回值不只是true |
javascript邏輯運算子 OR運算子 (||) 與 AND運算子 (&&):javascript邏輯運算子 || (OR) 跟 && (AND): 在傳回運算結果時,有個特別的地方...
就是如果是傳回值是true那會傳回決定這結果的運算元的那個值(或物件),而不是單純傳回布林值的true |
onload的弔詭 |
onload是W3C DOM 中定義的事件,該事件會在圖片或文件載入完成時送出..何謂載入完成?? 所謂的載入完成包含了文件本身,和其他附屬的資源, 例如是圖像,樣式表,或是script。 可以使用onload事件的HTML標籤有下面幾種: |
按個讚!~支持本站!~