javascript進階程式設計 1 ~ 3 章 部分知識點總結

來源:互聯網
上載者:User

標籤:指示   arguments   第一章   string   bool   src   功能   編譯   傳遞   

第一章 javascript簡介

javascript的簡介,有關js的一些曆史問題。

js初期在不同的瀏覽器存在很大的相容問題,但是慢慢的大家都在向標準靠攏,相容問題已經好很多了。

我們通常會聽到ECMAScript,它跟javascript是什麼關係呢?

JS = ES + BOM(瀏覽器物件模型) + DOM(文件物件模型) 

ES就是對javascript的類型,值,對象,屬性,函數以及程式句法和語義,DOM就是ES運行在瀏覽器環境的時候,瀏覽器為其提供的擴充以實現更多更具體的功能(web瀏覽器只是ES實現肯能的環境之一,比如還有服務端的Node.js)。開發人員則可以通過BOM控制瀏覽器顯示的頁面以外的部分。

不過注意DOM並不是針對js的,很多別的語言也實現了DOM。

儘管眾瀏覽器都實現了某些眾所周知的共同特性,但其他特性還是會因瀏覽器而異。

 

第二章 在HTML中使用javascript

在頁面中使用js的主要方法就是通過<script>元素,使用<script>元素的方法有兩種

1. 直接在頁面中嵌入js代碼:

<script type="text/javascript">

function sayHi() {

  alert("hi!");

}

</script>

但是在代碼中使用 "</script>" 時,要使用逸出字元 "\" ,不然會被當做代碼的結束標籤。如  alert("<\/script>");  瀏覽器會彈出 "</script>"。

 

 

2. 包含外部檔案:

<script type="text/javascript" src="example.js"></script>

 

標籤位置

瀏覽器在解析到 <body> 標籤時才開始呈現內容,將 <script> 元素放在 <head>元素中的話,則頁面會等待所有 js 檔案載入完才會呈現內容,在這之前頁面都是影片空白。

因此通常將 <script> 放在 <body> 之後,</body> 之前。

所有<script>元素都會按照它們在頁面中出現的先後次序依次被解析。在不使用defer和async屬性的情況下,只有解析完前面的 <script> 元素中的代碼之後才會開始解析後面 <script> 元素中的代碼。

 

引入js代碼的最佳做法

使用外部檔案引入

優點:可維護性,可緩衝,適應未來

 

文檔模式

文檔模式這個概念通過 doctype 切換實現, 最初包含兩種模式:混雜模式標準模式

這兩種模式主要影響CSS內容的呈現,某些情況下也會影響到 js 的解釋執行。

隨後IE又提出准標準模式,它與標準模式的差異幾乎可以忽略。

 

 第三章 基本概念

 

標識符:變數,函數,屬性的名字,或者函數的參數。

規則:第一個字元必須是字母,底線(_),美元符($),其他字元可以是字母,底線,美元符,數字

ES表示符習慣採用駝峰標記法,即第一個字母小寫,剩下每個單詞的首字母大寫: firstSecond, myCar, doSomethingImportant

 

strict 模式

strict 模式是為javascript定義了一種不同的解析與執行模式

strict 模式下, ES3 中一些不確定的行為得到處理,對某些不安全的操作拋出錯誤。

strict 模式下,javascript的執行效果會有很大不同。

 

要在整個指令碼中使用strict 模式,可以在頂部添加代碼

  "use strict" ;

在函數內部上方包含這條編譯指示,可以指定函數在strict 模式下執行:

function() {

  "use strict";

  //code

}

 

變數

ES的變數是鬆散類型的,可以儲存任何類型的資料類型

定義變數時使用 var 操作符 (ES6 中新增了 const 與 let 操作符)。

使用 var 定義的變數將成為該變數的範圍中的局部變數。如果忽略 var 操作符,該變數將成為一個全域變數。

 

資料類型

ES有五種簡單類型資料(基本類型資料):Undefined, Null, Boolean, Number, String  及一種複雜資料類型 Object

所有值都將是是上述六種資料類型之一

 

typeof 操作符

typeof是一個操作符而不是函數。

有六個可能的傳回值

1. "undefined"

2. "boolean"

3. "string"

4. "number"

5. "object"

6. "function"

注意 typeof null 返回的是 "object" ,因為 null 的本意是一個Null 物件引用。

 

 Undefined 類型

這個類型只有一個值: undefined

包含 undefined 值的變數與未定義的變數不同

var message;

//var age;

alert(message); //"undefined"

alert(age); // 報錯

但是

typeof message 與 typeof age  都會返回 undefined值,儘管 age 是未聲明的

 

Null類型

這個類型只有一個值 : null,它表示一個Null 物件指標。

 

Boolean類型

兩個字面值: true, false(true不一定等於1, false 不一定等於0)

ES所有類型的值都有與這兩個值等價的值,可以調用轉型函數 Boolean() ,或者進行兩次非操作 (!!)

true, 任何非Null 字元串,任何非零數值,任何對象都會在調用 Boolean() 時返回 true  ( 包括空數組和Null 物件 []  , {} )

 

Number類型

可以表示整數和浮點數

八進位,第一個數是0(strict 模式下八進位無效,會拋出錯誤)

Number.MIN_VALUE 儲存了 ES 能表示的最小數值,大多數瀏覽器中這個是 5e-324

Number.MAX_VALUE     1.7976931348623157e+308

數值超出範圍時會被表示為 Infinity 與 -Infinity 

 

NaN

not a number

兩個特點: 任何涉及 NaN 的操作都會返回 NaN , NaN 與任何值都不相等,包括自身

isNaN() 任何不能轉換為數值的值都會被返回 true 

 

數值轉換

Number() 與 parseInt()

前者在轉換字串時比較複雜且不夠合理,處理整數時更常用的是後者

 

parseInt() 在轉換字串時:它會先找到第一個非空白字元,如過第一個字元不是數字或者負號, 這個函數立即返回 NaN(因此Null 字元會返回NaN)。

             如果第一個字元是數字,則繼續解析第二個字元,直到解析完後面字元或者遇到第一個非數字字元(小數點會被當成非數字字元)。

 

parseInt() 可以識別各種整數格式

parseInt("070"); // 56(ES3)  70(ES5) (8進位)

parsetInt("0xf"); // 15(16進位)

 

ES5 中parseInt()  已經不具備解析八位元值的能力。為了避免上面那種問題 

 

可以為 parseInt() 提供第二個參數(轉換時使用的基數,即將傳入的第一個參數按這個基數來解析)

parseInt("AF",16); //175

parseInt("AF"); //NaN

這時可以解析八進位,指定基數會影響到轉換的輸出結果。

 

建議:無論什麼情況下都明確指定基數。

 

parseFloat() 也是從第一個字元開始解析每個字元,也一直解析到字元末尾,直到遇到第一個無效的浮點數數字字元為止。因此,第一個小數點是有效,第二個小數點就是無效的了,第二個小數點後面的字串將被忽略。

parseFloat() 只解析十進位值(因此十六進位的數始終會被解析為0),沒有第二個參數制定基數。另,如果字串包含的是一個可解析為整數的數(沒有小數點或者小數點後為0),會返回整數。

(Null 字元串也會返回NaN)

 

 String 類型

逸出字元:用於表示非列印字元或者具有其他用途的字元。例如 : \n ,\t, \b, \r

 

字串的特點

ES中的字串是不可變的,一旦建立,其值不可改變。要改變某個變數儲存的字串,首先要銷毀原來的字串,然後用另一個包含新值的字串填充該變數。

 

轉換為字串

數值,布爾值,對象和字串都有一個 toString() 方法,但 null 和 undefined 沒有這個方法。

通常這個方法不必傳遞參數,但是調用數值的 toString() 方法時,可以傳遞一個參數:輸出數值的基數。預設情況下返回十進位。

注意

var a = 010;

a.toString(); // 8 (chrome)

如果知道轉換的值不是 null 或者 undefined,也可以使用轉型函數 String() ,能夠將任何類型的值轉換為字串:如果有 toString() 方法,則調用這個方法。對於 null 會返回 "null" , undefined 會返回 "undefined"。

 

tips :要把某個值轉換為字串可以使用加號操作符,把它與一個字串 ("") 加在一起。

 

 Object 類型

如果不給建構函式參數,則可以省略後面那一對圓括弧(var o = Object),但是不推薦。

一個重要思想:ES中,Object類型是所有它的執行個體的基礎,Object類型所具有的任何屬性和方法也同樣存在更具體的對象中。

Object 每個執行個體都有下面屬性與方法

  1. constructor
  2. hasOwnProperty(propertyName)
  3. isPrototypeOf
  4. propertyIsEnumerable(propertyName)
  5. toLocaleString()
  6. toString()
  7. valueOf()

 

 操作符

 

自增,自減操作符在不包含有效數位字串時,將變數的值設為 NaN ,false 會先被轉換為0,true 會先被轉換為 1。

一元加和減操作符:對非數值應用一元加操作符時,會像 Number() 轉型函數一樣對這個值進行轉換。

 

位操作符

第三十二位表示符號,0 表示正數,1 表示負數。

 對數值應用位操作時,內部都是64位元值先轉換為32位元值,進行位操作之後再轉換為64位元值。進行位操作時,NaN 和 Infinity 會被當做 0 來處理。

按位非操作的實質就是運算元的賦值減一。還有按位與(&),按位或( | ),按位異或(^)。

左移:(<<)空位用 0 填補

有符號右移:(>>)空位用符號位填補。

無符號右移:(>>>)用 0 填補空位 。通常負數無符號右移的結果會非常大。

 

布爾操作符

邏輯非(!):返回 false 的情況 : 運算元是對象,運算元是一個非Null 字元串,運算元是非 0 的任意數值(包括Infinity)

       返回 true 的情況 : 運算元是Null 字元串,0, null, NaN, undefined

tips:同時使用兩個邏輯非操作符,實際就會類比Boolean() 轉型函數的行為。最終結果與對這個值使用Boolean() 函數相同。

 

邏輯與(&&):返回兩個運算元中的一個。當第一個運算元為真的時候,返回第二個運算元。第一個運算元為假的時候,直接返回第一個運算元。邏輯與是一個短路操作符,當第一個運算元能決定結果的時候,那就不會再對第二個運算元求值(就算第二個值原本未聲明會導致報錯)。

 

邏輯或(||):返回兩個運算元中的一個。當第一個運算元為真的時候,返回第一個運算元,第一個運算元為假的時候返回第二個運算元。他也是一個短路操作符,第一個運算元為真,即第一個運算元就能決定結果的時候,就不會再對第二個運算元求值。

         可以用這一行為來避免為變數賦null 值或者undefined 值。

 

乘性操作符

包括乘法除法求模(取餘)。

 

加性操作符

1.加法:在有一個運算元是字串的情況下,會將另一個運算元轉換為字串,然後將兩個字串拼接起來。

2.減法:如果一個運算元是字串,布爾值,null,undefined,則先在後台調用 Number() 函數將其轉換為數值。如果轉換結果為NaN,則計算結果就是NaN。

    如果一個運算元是對象,先調用valueOf() ,如果得到NaN,則結果就是NaN。沒有valueOf() 方法的話就調用toString() 方法取得字串並得到數值。

 

關係操作

<, >, <=, >= 它們都返回一個布爾值。

1.都是數值的話則進行數值比較。

2.都是字串的話則比較字元編碼值。

3.一個運算元是數值的話,將另一個運算元轉換為數值再比較。

4.如果一個運算元是布爾值,則將其轉換為數值,再比較。

5.對象。調用valueOf() 或者toString() 方法後再比較。

 

"23" > "3"; //false 

"23" > 3;   //true 注意轉換規則

NaN > 3;   //false

NaN <= 3; //false

"a" < 3; //false  a 這時候被轉換為 NaN

"a" >= 3; //false 

 

相等操作符:相等和不相等,全等和不全等

 

1相等和不相等:

這兩個操作符在比較之前都會先轉換運算元(強制轉型),再比較相等性。

1.如果有比較值為布爾值,則先將 true 轉換為1,false 轉換為 0。

2.一個運算元為字串,一個運算元為數值,則先將字元轉換為數值。

3.一個操作符是對象,而另一個不是的話,則調用 valueOf() 方法,得到的基本類型值按前面方法進行比較。

 

規則

1.null 與 undefined 相等

2.比較相等性之前,不能將null 和 undefined 轉換為任何其他值。

3.如果有一個數是NaN,則相等操作符返回false。即使兩個數都是NaN,相等操作符也不會返回 true。

4.如果兩個運算元都是對象,只有這兩個運算元指向同一個對象的時候,相等操作符才會返回true。

 

2.全等和不全等

全等操作符只在兩個運算元未經轉換就相等的情況下才會返回 true。這時 null === undefined 會返回false,因為它們類型不同。

 

if ([]) {

  alert(1);

}

if ([] == true) {

  alert(2);

}

if ([] == false) {

  alert(3);

}

//1

//3

當直接傳入空數組的時候,調用的是 Boolean() 轉型函數,空數組是一個對象,這時候被轉換為 true ,因此可以執行大括弧裡的語句。

但是當使用相等操作符的時候,由於含有布爾值,布爾值會轉變成數值,[] 這時候調用的是 Number() 轉型函數,這時候就是 0 。

 

函數

理解參數

arguments 對象只是與數組類似,並不是Array的執行個體。

arguments的值永遠與對應具名引數保持同步。

notice:如果只傳入了一個值,arguments[1] 設定的值不會反應到具名引數中。沒有傳遞值的具名引數將自動被賦予undefined 值。

 

function add(num1, num2) {

  arguments[1] = 10;

  alert(arguments[0] + num2);

}

add(10); // NaN

add(10,20); // 20

add(10,30); //20

 

不能重載。

 

 

 

 

 

 

 

 

 

 

 

 

javascript進階程式設計 1 ~ 3 章 部分知識點總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.