Javascript 學習 筆記三

來源:互聯網
上載者:User

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、“==”和“===”運算子(該詳細介紹來自知乎林建入,原文地址:點擊開啟連結)

一、嚴格相等運算子 === 的實現

 

=== 被稱為 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,則它的實際運算過程如下
  1. 計算出運算式 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、Null 字元串(不是使用new String()定義)時,value為假,其他情況為真。

    4、for...in 語句

    for...in 語句用於對數組或者對象的屬性進行迴圈操作。
    for ... in 迴圈中的代碼每執行一次,就會對數組的元素或者對象的屬性進行一次操作。
    文法:

     

    for (變數 in 對象){    在此執行代碼}
    “變數”用來指定變數,指定的變數可以是數組元素,也可以是對象的屬性。

     


     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.