JS高級程序設計第3章--精簡版

前言:純手打!!!按照本身思路重寫!!!此次是二刷了,想暑假作一次完整的筆記,但用本子來寫筆記的話太貴了,可能哪天還丟了。。因此仍是博客好==數組


 第三章:基本概念(語法、數據類型、流控制語句、函數)安全


3.1 語法:函數

  ECMAScript的語法大量借鑑了C及其餘語言。測試

3.1.1 區分大小寫this

3.1.2 標識符:編碼

  指的是變量、函數、屬性的名字、函數的參數。注意:首字符必須是一個字母、下劃線、或者美圓$符號。spa

  ES標識符采用駝峯大小寫格式(首字母小寫,其餘單詞的首字母大寫,如:setData),不能夠把關鍵字、保留字、true、false、null做爲標識符。debug

3.1.3 註釋:指針

  單行註釋: //code

  塊級註釋: /* *內容 */

3.1.4 嚴格模式:對某些不安全的操做拋出錯誤

  在腳本中啓動嚴格模式,能夠在其頂部寫一行代碼:"use strict"

3.1.5 語句:

  以分號結尾,其實也能夠不寫,但最好寫。。。

3.2 關鍵字和保留字:(這些都不能夠做爲標識符)

  關鍵字大體爲:  break、else、new、var、 case、  finally 、 return、 void 、 catch  、for  、switch 、 while 、 continue、  function  、this 、 with 、default 、 if 、 throw 、 delete 、 in 、  try 、do 、 instranceof、  typeof。。。

  保留字大體位: abstract 、 enum   、int 、 short 、 boolean  、export  、interface、  static、  byte  、extends 、 long 、 super 、 char 、 final  、native  、synchronized 、 class  、float 、 package  、throws 、 const  、goto  、private 、transient 、 debugger 、 implements  、protected 、 volatile 、 double  、import  、public、class、entends、super、const、export、import、let、public。。。、

3.3 變量:

  • var message;   即定義一個變量,該變量成爲該變量做用域中的局部變量,此變量未初始化,會保存一個值----undefined、
  • var message = "hi";
  • message = "hi";   全局變量

3.4 數據類型:

  • 五種簡單數據類型(即基本數據類型):Undefined、Null、Boolean、Number、String
  • 一種複雜數據類型:Object

3.4.1 typeof操做符:

  檢測給定變量的數據類型——typeof

  • 「undefined」——若是這個值未定義;
  • 「boolean」——若是這個值是布爾值;
  • 「string"——若是這個值是字符串;
  • 」number「——若是這個值是數值;
  • 」object」——若是這個值是對象或者null;
  • 「function"——若是這個值是函數!!!雖然函數是對象,但能夠經過typeof區分是否是函數。

  如:var message = "some string";

    alert(type of message);  //"string"

    alert(type of null);  //」object"

3.4.2 Underfined類型:

      var message; var message1 = undefined; var age

   alert(message == undefined);  //true

   alert(message);  //undefined

      alert(age);  //產生錯誤

      alert(message1 == underfined);  //true

3.4.3 Null類型:

   null值表示一個空對象指針,因此用typeof檢測會返回「object」。

   var car = null;

   alert(typeof car);  //"object"

   !!!注意 undefined值是派生自null值的,因此 alert(null == undefined);  //true

3.4.4 Boolean類型:

  該類型只有兩個字面值:true和false。

數據類型

轉換爲true的值

轉換爲false的值

Boolean

true

false

String

任何非空字符串

" "(空字符串)

Number

任何非0數字值(包括無窮大)

0和NaN

Object

任何對象

null

Undefined

n/a(不適用)

undefined

  這些轉換規則對理解流控制語句(如if語句)自動執行相應的Boolean轉換很是重要:

  var mesage = "Hello World";

  if (message) {  // 這個message自動轉換了對應的Boolean值——ture

    alert("Value is true");

  }

3.4.5 Number類型:

  數值字面量格式:(在進行算術計算時,全部八進制和十六進制表示的數值最終都將被轉換成十進制數值)

  • 十進制整數:var intNum = 55;
  • 八進制:(嚴格模式下無效)第一位是0,而後是八進制數字序列(0~7),若超過7,則第一位的0被忽略,

   後面的數值被看成十進制來看,var octalNum1 = 070;  //八進制的56          var octalNum2 = 079;  //無效的八進制,解析爲79

  • 十六進制:前2位必須是0x,後跟任何十六進制數字(0~9及A~F 字母可大小寫)
  浮點數值: 簡單的不說,說說 var floatNum = 3.125e7;  //等於31250000,即3.125乘以10的七次方。
  0.1 + 0.2 結果不是0.3,而是0.30000000000000004,因此在進行算術計算時其精確度遠遠不如整數,因此最好不要作如下測試:
  if (a + b == 0.3) {
    alert ("You got 0.3" );
  }
  
   數值範圍:有規定最大最小值,若超出,則轉換成負無窮(-Infinity),正無窮(Infinity)。
  
   NaN:即非數值,它是一個特殊的數值。表示一個原本要返回數值的操做數未返回數值的狀況(這樣子就不會拋出錯誤)
     任何涉及NaN的操做都會返回NaN,NaN與任何值都不相等,包括NaN自己。 alert (NaN == NaN);  //false
     !!!因此ES定義了 isNaN() 函數,這個函數接受一個任何類型的參數,函數能夠幫咱們肯定這個參數是否「不是數值」,某些不是數值的值會被自動直接地轉換爲數值。
     alert (isNaN(NaN));  //true,表示這個不是數值
     alert (isNaN(10));  //false,表示10是數值
        alert (isNaN(「10」));  //false,表示能夠被轉換成數值10
     alert (isNaN(「blue"));  //true,表示這個不能轉換成數值
     alert (isNaN(true));  //false,表示能夠轉換成數值1
 
   數值轉換:有三個函數能夠把非數值轉換成數值
 
 
 

  Number() 能夠用於任何數據類型,轉型函數將其轉換爲數值。

    • var num1 = Number(」Hello Wordl「);  //NaN,即字符串中若包含除了數字的字符,則將其轉換爲NaN
    • var num2 = Number(」 「);        //0
    • var num3 = Number(」000011「);        //11,前面的0被忽略
    • var num4 = Number(true);   //1
    • var num5 = Number(null);  //0
    • var num6 = Number(undefined);  //NaN
    • 若是是對象,則調用對象的valueOf()方法,而後依照前面的規則轉換返回的值。若轉換的結果是NaN,則調用對象的toString()方法,而後再次依照前面的規則轉換返回的字符串。

  parseInt():處理整數的時候經常使用:

    • var num1 = parseInt(」1234blue「);  //1234,忽略blue
    • var num2 = parseInt(」 「);        //NaN,和Number()不一樣,由於parseInt()會拼命找第一個非空格字符。
    • var num3 = parseInt(」0xA「, 16);        //10(十六進制數轉十進制)
    • var num4 = parseInt(22.5);   //22
    • var num5 = parseInt(」070「 ,8);  //56(八進制數轉十進制)
    • var num6 = parseInt(」70「 ,10);  //70

  parseFloat() :與parseInt()的類似與區別是  都是從第一個字符開始解析,只認識一個小數點,會忽略一開始的0,只識別十進制,而十六進制的字符串會被轉換爲0

    • var num1 = parseFloat(」1234blue「);  //1234
    • var num2 = parseFloat(」0xA「);  //0,不認識十六進制~
    • var num3 = parseFloat(」22.4.33「);  //22.4
    • var num4 = parseFloat(」0202.4「);  //202.4
    • var num5 = parseFloat(」3.125e7「);  //31250000

 

3.4.6 string類型:即字符串

  能夠由雙引號和單引號表示。

  • String數據類型包含一些特殊的字符字面量(轉義序列),用於表示非打印字符。經常使用的有:

  \n 表示換行,\t 表示製表,\b表示退格,\r表示回車,\\表示斜槓,\'表示單引號,\"表示雙引號,\xnn表示以十六機制代碼nn表示的一個字符(n爲0~F),\unnnn表示以十六進制代碼nnnn表示的一個Unicode字符(n爲0~F)。

  !!!注意,n個字符長的轉移序列只表示一個字符(在length裏表示1)

  • 將一個值轉換爲字符串:有兩種方法
    • toString()方法:返回相應值的字符串表現,相應值能夠是數值、布爾值、對象和字符串值(返回字符串的一個副本)!但null和undefined值沒有這個方法。

        可傳參也能夠不傳參,參數表示以n進制格式(基數)返回數值,默認不填爲十進制。

      var num = 10;

      alert (num.toString());  // "10"

      alert (num.toString(2));  // "1010"

      alert (num.toString(8));  // "12"

      alert (num.toString(10));  // "10"

      alert (num.toString(16));  // "a"

    • String()轉型函數:在不知道要轉換的值是否是null或undefined時可使用。這個函數能夠將任何類型的值轉換爲字符串!
      • 若是值有toString() 方法,則調用該方法並返回相應的結果。
      • var value1 = true;  alert(String(value1));  // 「true" ,一個副本
      • var value2 = null;   alert(String(value2));  // "null" ,由於null沒有toString()方法因此String()函數就返回了這個值的字面量"null"。
      • var value3;  alert(String(value3));  // 」undefined「 ,由於undefined沒有toString()方法因此String()函數就返回了這個值的字面量」undefined「。

3.4.7 Object類型:就是對象!即一組數據和功能的集合。

  對象能夠經過執行new操做符後跟要建立的對象類型的名稱來建立,即 var o = new Object (); 若是不用給構造函數傳參,也能夠這麼寫:var o = new Object;但不推薦。

  關於Object的每一個實例的具體屬性和方法,第5、六章再討論。

3.5 操做符:

  是用於操做數據值的操做符,包括算術操做符、位操做符、關係操做符、相等操做符。

3.5.1 一元操做符:

  • 前置操做符: var age = 29; ++age;  age變量的值都是在語句被求值之前改變的。
  • 後置操做符: var price = 29; price++;  price變量的值都是在包含它們的語句被求值以後才執行的。
  • 以上的意思能夠從這段代碼看出:

   var num1 = 2;  var num2 = 20;  var num3 = num1-- + num2;  //等於22,由於是後置,因此在var num3語句裏它不改變先,等到這條語句被求值以後才改變  var num4 = num1 + num2 ;  //等於21,num1=1。

  • 加減先後置操做符不只能夠應用在整數上,還能夠應用在字符串、布爾值、浮動數值和對象上哦!!!
    • var s1 = "2";  s1++;  // 3,包含有效數字字符的字符串先轉換爲數字值,再執行加減的操做,而後字符串變量變成數值變量。
    • var s2 = "x",  s2++;  // NaN,由於不包含數字,不過字符串變量仍是會變成數值變量NaN;應用一元操做符都會變成NaN!!!
    • var b = false;  b++;  // 1,布爾值變成0或1,再執行加減1的操做,而後布爾值變量變成數值變量。
    • var f = 1.1;        f--;  //0.10000000000000009
    • var o = {         ;  o--;    //-2

        valueOf : function () {

            return -1;

        }

      }

  • 一元減操做符(-):主要用於表示負數

3.5.2 位操做符:本小節暫不講解。。。。。。。

3.5.3 布爾操做符:

  • 邏輯非(!):短路操做符。應用於任何值,返回一個布爾值。生動的說就是:alert(!」我是好人「)   //false,返回一個壞人,由於有!存在。
    • alert(!false);  // true
    • alert(!"blue");  // false
    • alert(!0);    // true
    • alert(!NaN);  // true
    • alert(!" ");   // true
    • alert(!12345); //false

   若使用兩個!那就是反過來咯。

  • 邏輯與(&&):全true則true。應用於任何類型的操做數,不只僅是布爾值,但不能夠在&&操做中使用未定義的值,否則會致使錯誤,不返回值。遵循如下規則:

   若第一個操做數能決定結果了,那第二個就無視。即第一個是false,那就不看第二個了。若第一個是true,那仍是會去看第二個(第二個不可使用未定義的值)。

   若兩個操做數都是對象,則返回第二個操做數;若第一個操做數是null,則返回null;若第一個操做數是NaN,則返回NaN;若第一個操做數是undefined,則返回undefined;

第一個操做數

第二個操做數

結果

true

true

true

true

false

false

false

true

false

false

false

false

 

  • 邏輯或(||):有true則true,和邏輯與同樣,不可使用未定義的值

   若第一個操做數能決定結果了,那第二個就無視。即第一個是true,那就不看第二個了。若第一個是false,那仍是會去看第二個(第二個不可使用未定義的值)。

   若兩個操做數都是對象,則返回第一個操做數;若兩個操做數都是null,則返回null;若兩個操做數都是NaN,則返回NaN;若兩個操做數都是undefined,則返回undefined;

第一個操做數

第二個操做數

結果

true

true

true

true

false

true

false

true

true

false

false

false

3.5.4 乘性操做符:乘法、除法和求模,會自動把非數值的操做符轉換位數值(即自動用Number()轉換)

  • 乘法要注意的是: 結果超出ES數值表示範圍,則返回Infinity或-Infinity;如有某一個操做數是NaN,那結果就是NaN;操做數是Infinity,那結果也是Infinity;Infinity乘以0等於NaN。
  • 除法要注意的是: 結果超出ES數值表示範圍,則返回Infinity或-Infinity;如有某一個操做數是NaN,那結果就是NaN;操做數是Infinity,那結果也是Infinity;Infinity除以Infinity等於NaN;0除以0等於NaN。
  • 求模(%)主要須要注意的是:Infinity除以Infinity等於NaN;被除數是0,結果就是0。

3.5.5 加性操做符:加法、減法

  • 加法要注意的是:如有一個操做數是NaN,結果就是NaN;+0加+0等於+0;-0加-0等於-0;+0加-0等於+0;

   !!!最重要的來了,若是兩個操做數都是字符串,則將第二個操做數與第一個操做數拼接起來;若是隻有一個操做數是字符串,則將另一個操做數轉換爲字符串,再將第二個操做數與第一個操做數拼接起來。

   若是有一個操做符是對象、數組或布爾值,則調用它們的toString() 方法取得相應的字符串值;對於undefined和null,則分別調用String()函數並取得」undefined「和」null「。

   例題:var num1 = 5;  var num2 = 10;  var message = "The sum of 5 and 10 is" + num1 + num2;  alert(message);  //"The sum of 5 and 10 is 510" ;

      var num1 = 5;  var num2 = 10;  var message = "The sum of 5 and 10 is" + (num1 + num2);  alert(message);  //"The sum of 5 and 10 is 15" ;

      var result1 = 2 + true;  // 3,由於true被Number()函數轉換成1

  •  減法要注意的是:如有一個操做數是NaN,結果就是NaN;+0減+0等於+0;-0減-0等於+0;+0加-0等於-0;

   !!!最重要的來了,它和加法不同,不拿來拼接什麼鬼字符串。

   !!! (主要是使用了Number()函數)

   例題:var result1 = 5 - true;  //4

      var result2 = NaN - 1;  //NaN

      var result3 = 5 - 3;  //2

      var result4 = 5 - " ";  //5

      var result5 = 5 - 」2「;  //3

      var result6 = 5 - null;  //5

3.5.6 關係操做符:大於、小於、小於等於、大於等於:

  相應規則:

  • 若兩個操做數都是數組,則執行數值比較。
  • 若兩個操做數都是字符串,則比較兩個字符串對應的字符編碼值。
  • 如有一個操做數是數值,則將另一個操做數轉換爲一個數值,而後執行數值比較。
  • 如有一個操做數是對象,則調用這個對象的valueOf()方法再比較,若沒有此方法,則調用toString()方法,再比較。
  • 若一個操做數是布爾值,則先將其轉換爲數值而後再比較。
  • 任何數和NaN比較,結果都是false。

  例題:var result = "a" < 3;  //false,字符串a不能被轉換成合理的數值,因此」a"被轉換成NaN

     var result1 = "23" < "3";  //true,比較的是字符編碼

     var result2 = "23" < 3;  //false,由於」23「變成了23

3.5.7 相等操做符:==、!= ,===、!== :

  • 相等與不相等:==、!=
    • 相等:相等和不相等是先強制轉型再比較它們的相等性
      • 若兩個操做數相等則返回true,不相等則返回false;
    • 不相等:
      • 若兩個操做數相等則返回false,不相等則返回true;
    • 基本規則:
      • 如有布爾值,則先轉換爲數值,false=0,true=1;
      • 如有一個是字符串,另外一個是數值,則先把字符串轉換爲數值;
      • 如有一個是對象,另外一個不是,則調用對象的valueOf()方法,用獲得的基本類型值再進行比較;
      • null == undefined(相等)
      • 如有一個是NaN,則相等操做符返回false,不相等操做符返回true;即便有兩個都是NaN都同樣,由於NaN不等於NaN;
      • 若兩個都是對象,則比較它們是否是都指向同一對象,是則 相等操做符返回true,不然返回false;
      • null == 0 ,undefined == 0 //false,由於null和undefined在作相等判斷時不進行轉型,因此null、undefined和0是不一樣類型數據,因此返回false;

表達式

null == undefined、false == 0、NaN != NaN、」5「 == 五、true == 1

true

」NaN「 == NaN、5 == NaN、NaN == NaN、null == 0、undefined == 0

false

  • 全等和不全等:===、!==
    • 比較前不轉換,因此比較的時候看數據類型相不相等
    • 其餘規則和相等不相等同樣~~

 

未完、待續。

相關文章
相關標籤/搜索