Javascript觀念、陷阱與深入研究站內文章收集

我發現要在網站裡找到一些想要的文章的真不容易,

可是分類太多又不好,

所以弄了這篇來收集這部落格內一些關於觀念、陷阱與深入研究的文章

這樣我自己找文章也方便,希望大家也有所幫助:

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標籤有下面幾種:

 
 
 
 

  按個讚!~支持本站!~

FB推薦載入中