天天看點

Javascript 學習 筆記三1、Javascript 組成:2、“==”和“===”運算符(該詳細介紹來自知乎林建入,原文位址:點選打開連結)3、JavaScript中的資料真假判斷4、for...in 語句

ecmascript--javascript的核心,描述了語言的基本文法和對象。

dom(文檔對象模型)--the document object model描述了作用于網頁内容的方法和接口。document的操作,比如:

bom(浏覽器對象模型):the browser object model描述了和浏覽器互動的方法和接口。window的操作,比如:

Javascript 學習 筆記三1、Javascript 組成:2、“==”和“===”運算符(該詳細介紹來自知乎林建入,原文位址:點選打開連結)3、JavaScript中的資料真假判斷4、for...in 語句

=== 被稱為 strict equals operator,假設有表達式 a === b,則它的實際運算過程如下

計算出表達式 a 的結果,并存入 lref 變量

将 getvalue(lref) 的結果存入 lval 變量

計算出表達式 b 的結果,并存入 rref 變量

将 getvalue(rref) 的結果存入 rval 變量

執行 strict equality comparison 算法判斷 rval === lval 并将結果直接傳回

這裡的 strict equality comparison 算法很關鍵,假設要計算的是 x === y,則過程如下

1. 如果 type(x) 和 type(y) 不同,傳回 false

2. 如果 type(x) 為 undefined,傳回 true

3. 如果 type(x) 為 null,傳回 true

4. 如果 type(x) 為 number,則進入下面的判斷邏輯

4.1. 如果 x 為 nan,傳回 false

4.2. 如果 y 為 nan,傳回 false

4.3. 如果 x 的數字值和 y 相等,傳回 true

4.4. 如果 x 是 +0 且 y 是 -0,傳回 true

4.5. 如果 x 是 -0 且 y 是 +0,傳回 ture

4.6. 傳回 false

5. 如果 type(x) 為 string,則當且僅當 x 與 y 的字元序列完全相同(長度相等,每個位置上的字元相同)時傳回 true,否則傳回 false

6. 如果 type(x) 為 boolean,則若 x 與 y 同為 true 或同為 false 時傳回 true,否則傳回 false

7. 如果 x 和 y 引用的是同一個對象,傳回 true,否則傳回 false

好了,當你明白了 === 的實作之後,我們再來看看 == 的實作,比較一下他們有何不同?

== 被稱為 equals operator (注意看沒有 strict 了),假設有表達式 a == b,則它的實際運算過程如下

執行 abstract equality comparison 算法判斷 rval == lval 并将結果直接傳回

注意,其中的前 4 個步驟是和 === 完全相同的。唯獨 5 不同。對于 === 來說,調用的是 strict equality comparison 算法,但是 == 則調用的是 abstract equality comparison 算法。雖然僅一詞之差,但是卻有質的不同,我們下面就來看看到底它是怎麼實作的

假設要計算的是 x == y,abstract equality comparison 計算的過程如下(很冗長,但是每個步驟都很簡單)

1. 如果 type(x) 和 type(y) 相同,則

1.1. 如果 type(x) 為 undefined,傳回 true

1.2. 如果 type(x) 為 null,傳回 true

1.3. 如果 type(x) 為 number,則

1.3.1. 如果 x 是 nan,傳回 false

1.3.2. 如果 y 是 nan,傳回 false

1.3.3. 如果 x 的數值與 y 相同,傳回 true

1.3.4. 如果 x 是 +0 且 y 是 -0,傳回 true

1.3.5. 如果 x 是 -0 且 y 是 +0,傳回 true

1.3.6. 傳回 false

1.4. 如果 type(x) 為 string,則當且僅當 x 與 y 的字元序列完全相同(長度相等,每個位置上的字元相同)時傳回 true,否則傳回 false

1.5. 如果 type(x) 為 boolean,則若 x 與 y 同為 true 或同為 false 時傳回 true,否則傳回 false

1.6. 如果 x 和 y 引用的是同一個對象,傳回 true,否則傳回 false

2. 如果 x 是 null 且 y 是 undefined,傳回 true

3. 如果 x 是 undefined 且 y 是 null,傳回 ture

4. 如果 type(x) 為 number 且 type(y) 為 string,以 x == tonumber(y) 的比較結果作為傳回

5. 如果 type(x) 為 string 且 type(y) 為 number,以 tonumber(x) == y 的比較結果作為傳回值

6. 如果 type(x) 為 boolean,以 tonumber(x) == y 的比較結果作為傳回值

7. 如果 type(y) 為 boolean,以 x == tonumber(y) 的比較結果作為傳回值

8. 如果 type(x) 為 string 或 number 且 type(y) 為 object,以 x == toprimitive(y) 的比較結果作為傳回值

9. 如果 type(x) 為 object 且 type(y) 為 string 或 number,以 toprimitive(x) == y 的比較結果作為傳回值

10. 傳回 false

從上面的算法流程可以看出,a === b 是最簡單的。如果 a 和 b 的類型不同,那麼一定會傳回 false。而 a == b 則要靈活得多。javascript 會嘗試調整 a 和 b 的類型,例如若 a 為字元串 b 為數字,則将字元串先轉化為數字再與 b 比較,等等。這在很多時候簡化了程式員的代碼量。

使用if(value)判斷真假的情況:

當value為undefined、null、fasle、0、空字元串(不是使用new string("")定義)時,value為假,其他情況為真。

for...in 語句用于對數組或者對象的屬性進行循環操作。

for ... in 循環中的代碼每執行一次,就會對數組的元素或者對象的屬性進行一次操作。

文法:

“變量”用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性。

繼續閱讀