Javascript 學習 筆記三
1、Javascript 組成:
ECMAScript--JavaScript的核心,描述了語言的基本語法和物件。
DOM(文件物件模型)--The Document Object Model描述了作用於網頁內容的方法和介面。document的操作,比如:
var lis = document.getElementsByTagName('li');
BOM(瀏覽器物件模型):The Browser Object Model描述了和瀏覽器互動的方法和介面。window的操作,比如:window.onload = function () {
}
2、“==”和“===”運算子(該詳細介紹來自知乎林建入,原文地址:點選開啟連結)
一、嚴格相等運算子 === 的實現
- 計算出表示式 a 的結果,並存入 lref 變數
- 將 GetValue(lref) 的結果存入 lval 變數
- 計算出表示式 b 的結果,並存入 rref 變數
- 將 GetValue(rref) 的結果存入 rval 變數
- 執行 Strict Equality Comparison 演算法判斷 rval === lval 並將結果直接返回
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,則它的實際運算過程如下
- 計算出表示式 a 的結果,並存入 lref 變數
- 將 GetValue(lref) 的結果存入 lval 變數
- 計算出表示式 b 的結果,並存入 rref 變數
- 將 GetValue(rref) 的結果存入 rval 變數
- 執行 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 比較,等等。這在很多時候簡化了程式設計師的程式碼量。
3、JavaScript中的資料真假判斷
使用if(value)判斷真假的情況:
當value為undefined、null、fasle、0、空字串(不是使用new String("")定義)時,value為假,其他情況為真。
4、for...in 語句
for...in 語句用於對陣列或者物件的屬性進行迴圈操作。
for ... in 迴圈中的程式碼每執行一次,就會對陣列的元素或者物件的屬性進行一次操作。
語法:
for (變數 in 物件)
{
在此執行程式碼
}
“變數”用來指定變數,指定的變數可以是陣列元素,也可以是物件的屬性。相關文章
- Java學習筆記-Day48 JavaScript(三)筆記JavaScript
- JavaScript學習筆記JavaScript筆記
- JavaScript 學習筆記JavaScript筆記
- JavaScript學習筆記(二)JavaScript筆記
- javaScript argument 學習筆記JavaScript筆記
- JavaScript學習筆記13JavaScript筆記
- JavaScript學習筆記01JavaScript筆記
- JavaScript學習筆記00JavaScript筆記
- 【JavaScript學習筆記】if使用JavaScript筆記
- Javascript 學習 筆記六JavaScript筆記
- Javascript 學習 筆記五JavaScript筆記
- Javascript 學習 筆記四JavaScript筆記
- React 學習筆記【三】React筆記
- goLang學習筆記(三)Golang筆記
- cmake 學習筆記(三)筆記
- 科三學習筆記筆記
- Java學習筆記三Java筆記
- unity學習筆記(三)Unity筆記
- JavaScript入門學習學習筆記(上)JavaScript筆記
- 學習JavaScript的原型筆記JavaScript原型筆記
- JavaScript學習筆記(八)—— 補JavaScript筆記
- javascript學習筆記--splice、sliceJavaScript筆記
- JavaScript正則學習筆記JavaScript筆記
- 【JavaScript學習筆記】hello worldJavaScript筆記
- 【JavaScript學習筆記】畫圖JavaScript筆記
- JavaScript學習筆記---數值JavaScript筆記
- JavaScript學習筆記---緣起JavaScript筆記
- Redis學習筆記(三) 字典Redis筆記
- TS學習筆記(三):類筆記
- ONNXRuntime學習筆記(三)筆記
- Python學習筆記(三)Python筆記
- android學習筆記三Android筆記
- Spss 學習筆記(三)SPSS筆記
- c++學習筆記(三)C++筆記
- CANopen學習筆記(三)NMT筆記
- JavaScript設計模式學習筆記JavaScript設計模式筆記
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- JavaScript學習筆記——基礎部分JavaScript筆記