JavaScript進階程式設計(第3版) 第三章 (基本概念)

來源:互聯網
上載者:User

標籤:科學   continue   Null 字元串   影響   efi   資料   通過   css   undefined   

3.1 文法

  1.不以數字開頭的數字,字母,底線,貨幣符號

  2.注釋:html <!-- --> css/**/ js單行// 多行/**/

       3.ES5 引入了strict 模式(strict mode)。即為js定義的一種不同的解析與執行模型。 可以在整個指令碼頭部或者函數的上方,包含“use strict”來啟用strict 模式(ie10以上支援strict 模式)

3.2 關鍵字和保留字

3.3 變數

          1.ECMAScript的變數是鬆散型的。即每個變數僅僅是一個用於儲存值的預留位置而已。

                不存在定義某個變數就必須儲存該種資料類型的值的規則,  “js”的變數相對於其他語言的變數,更加“放蕩”(不“始終如一”)。

          2.未經初始化的變數,會儲存一個特殊值-----undefined。

          3.使用未聲明(定義)的變數會報referenceError defined。

3.4 資料類型

         1.typeof ①結果:undefined,number,string,boolean,obeject(object和null的值,null是一個空的對象引用);function

                      ② 兩種用法:typeof 1 ; typeof(1)

        2.undefined (已經定義,未被初始化的值)

             defined(未被定義的)

        3.null Null 參考

              null和undefined 相等(==) 不全等(===)

       4.boolean Null 字元串,0和NaN,null,undefined ==》false

       5.number①用於儲存浮點數值需要的記憶體空間是儲存整數值的2倍。

                      ②可以用科學計數法(e)表示浮點數 3e2 = 3*10的2次方 = 3*100

                      ③浮點數的最高精度是17位元。

                     ④浮點數計算會產生舍入誤差問題。(基於IEE754數值的浮點計算的通病)

                                0.1+0.2 = 0.30000000000000004

                     ⑤isFinite(num) 確定num是不是無窮

                    ⑥NaN 不與任何值相等,包括NaN本身 isNaN 判斷是否可以轉化成數值

                             isNaN(NaN)true NaN是特殊的數實值型別

                             isNaN(“blue”) false

                             isNaN(“11”) false

                   ⑦Number() “”,null ,false =》 0

                           undefined=》NaN

                      忽略前置0,無法解析八進位

                ⑧paseInt() “”,null ,undefined =》 NaN

                         忽略前置0,無法解析八進位 所以加入第二個參數: paseInt("0x16",16) 基數16不帶引號

                         遇到無法轉換的字串時即停止。

                 ⑨ paseFloat() 解析時第一個小數點有效,第二個小數點無效。

                        忽略前置0,只解析10進位數;16進位的字串會被轉化成0

paseFloat("1234Blue") // 1234paseFloat("0xA") // 0paseFloat("1.9.8") // 1.9

 

    6.string()修改字串 : 要改變某個字串的值就要,”銷毀“原來的字串。“填充”新的字串。

                                  這個過程是後台進行的。所以在某些舊版本的瀏覽器中,拼接字串速度很慢。

                               ①toString() 轉化成字串 ,null和undefined沒有這個方法

                                    toString(num) 可以輸出任何有效num制式表示的字串值

                                ②轉型函數String();

             7.object

3.5 操作符

     1.一元 ①前置遞增/遞減 (1) 例如:--a; 先遞減1再參與運算

var a = 2;var b = --a + 2;alert(a) //1alert(b) //3

        ②後置遞增/遞減(1)

var a = 2;var b = a-- + 2;alert(a) //1alert(b) //4

   2.位操作符 ①負數的二進位碼,使用的是二進位補碼

                          求二進位補碼:a,求這個值絕對值的二進位碼 b,二進位反碼(0->1,1->0)c.二進位碼+1 口訣:正,反,+1

                          ①ECMAScript 所有數值都是以64位的格式儲存,但是位操作符不直接操作64位的值。而是先把64的值轉化成32位,操作32位,最後再把結果轉化成64位。

                          ② 按位非 ~ 本質:-運算元-1

var n = 25;var n1 = ~n;alert(n1); //26 //-25-1

                         ③按位與 & (10進位 -》 2進位 16 8 4 2 1)

                         ④按位或 | ⑤按位異或 與 | 的不同,1&1= 0;

                         ⑥(有符號)左移 <<,不會影響符號

                         ⑦(有符號)右移 >>,不會影響符號

                         ⑦(無符號)右移 > >>,影響符號(注意負數的是補碼)

3.布爾操作符   ① 邏輯非 ! ②邏輯與 && 短路與(a,一假則假 b,第一個為假以後就不會判斷第二個運算元)

              

var n = false;alert(n && bbbbb); //bbbbb是沒有定義的變數。正常情況下是會提示refrenceError defined的

 

                  ③邏輯或 || 短路操作符 第一個為真以後就不會判斷第二個運算元

var n = true;alert(n || bbbbb); //bbbbb是沒有定義的變數。正常情況下是會提示refrenceError defined的

   4.乘性操作符 (* / %)

           5.加性操作符  ①+ 如果一個運算元是字串,則把另一個也轉換成字串  

                     ②0 - 0 = 0 ; 0- (-0) = 0;-0-(-0) = 0;

          6.關係操作符 ①> < <= >=   ②如果一個運算元是數值,則把另一個運算元也轉換成數值 ;

                       ③如果2個運算元都是字串,則比較2個字串的字元編碼(大寫字母的字元編碼小於小寫字母的字元編碼)

 var tre = “A” < "a";   //true console.log("23" <  "3");  //true  (此處都是字串)

 

         7.相等操作符  ①== 比較的是值  (先轉換再比較)②===  比較的是類型(只比較不轉換)

                     特殊情況:null == undefined; (記住即可)
         8.條件操作符(?:) ①

var a = 1> 2?1:2;   //a = 2

 

       9.賦值操作符  =    +=   *=  -=  /= %=

      10.逗號操作符  ①用於執行多個操作(eg:聲明多個變數)

 3.6 語句

 

   1.if  ①始終使用{}  ②始終使用代碼塊分行

          2.do-while(後測試迴圈)

          3.while(前測試迴圈)

          4.for  ①在迴圈內部定義的i ,在外部仍然可以訪問它。

                    ②for(;;) 無限迴圈

          5.for in  ① 可以枚舉對象屬性

                       ②ECMAScript   對象的屬性沒有順序。所以通過for-in迴圈輸出的屬性名稱的順序是不可預測的。

                       ③ 如果迭代對象 的值是null或者undefined,則不執行迴圈

                       ④for(var x in arr)

         6.label語句

         7.break和continue   ①break會立即退出迴圈,強制執行迴圈後面的語句

           var num = 0;      for (var i = 0; i < 10; i++) {          if(i % 5 == 0){            break;          }          num ++;      }      alert(num) //num = 4;i = 5

 

                                        ②continue 會立即退出迴圈,從迴圈頂部繼續執行。

           var num = 0;      for (var i = 0; i < 10; i++) {          if(i % 5 == 0){            continue;          }          num ++;      }      alert(num) //num = 8;i = 9

 

                                         ③與label語句的結合使用。

 

          8.width 語句 ①為了簡化多次編寫同一個對象的工作。

           width(location){           var url = href;   }

 

           9.switch操作符使用的是全等操作符

3.7 函數

    1. ECMAScript中的函數,參數用數組表示。函數接觸的始終是這個數組,而不關心數組中包含哪些參數。所以即使定義的函數接受3個參數,單在使用時不一定要傳3個參數,可以少傳、多傳和不傳。

        在函數體內部,通過arguments對象訪問參數數組。

   2.arguments.length  可以得知有多少個參數傳輸給函數

   3.function fun1(num1,num2){}

        num1和arguments[0]的值會同步,但是它們的記憶體空間是獨立的。

   4.重載:在其它語言(如java)中可以為一個函數編寫2個定義,只要這2個函數定義的簽名(接受的參數的類型和數量)不一樣即可。

     ECMAScript中,參數是用數組表示的,因此對於函數來說參數的類型和數量都一樣,所以沒有簽名,沒有真正的重載。

JavaScript進階程式設計(第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.