1. 程式人生 > >js 高程學習總結 第三章

js 高程學習總結 第三章

js基本概念

  1. 區分大小寫
    變數名test 和Test分別表示兩個不同的變數。
  2. 識別符號
    即:變數、函式、屬性的名字,或者函式的引數。
    格式規則:第一個字元必須是一個字母、下劃線或一個美元符號;其他字元可以是字母、下劃線、美元符號和數字;也可以包含ascii或unicode字母符號,但是不推薦。標識符采用駝峰大小寫格式如 firstSecond

  3. 註釋
    單行註釋(//)和塊級註釋(/* */)

  4. 嚴格註釋
    “use strict”;

  5. 語句
    語句以分號結尾 ;

  6. 關鍵字、保留字

  7. 變數
    var message ; 未初始化的變數會儲存為一個特殊值 undefined
    函式中使用var定義一個變數,那麼這個變數在函式退出後就會被銷燬,在函式外不能訪問

  8. 資料型別
    5種簡單資料型別(基本資料型別):Undefined ,Null, Boolean, Number, String .還有複雜資料型別 Object ,本質是無序的名值對

  9. typeof 操作符
    由於ECMAScript 為鬆散型別,因此需要有一種手段來檢測給定變數的資料型別 typeof ;使用typeof操作符返回值可能為
    ——“undefined”–這個值未定義
    ——“boolean”–這個值為布林值
    ——“string”–這個值為字串
    ——“number”–這個值是數字
    ——“object”–這個值為物件或null
    ——“function”–這個值為函式

  10. Undefined 型別
    使用var宣告變數但未對其加以初始化時,這個變數的值就是undefined
    對於未初始化和未宣告的變數執行typeof操作符都會返回undefined值

  11. Null型別
    null值表示一個空物件指標,所以使用typeof操作符檢測null時會返回“object”;null == undefined (true);
    無論什麼時候,都沒有必要把一個變數的值顯示地設定為undefined,可是同樣的規則對於null不適用:只要儲存物件的變數還沒有真正的儲存物件,就應該明確的讓該物件儲存null值,可以進一步區分null和undefined

  12. Boolean型別
    只有兩個字面值 true和false(區分大小寫,與數字不是一回事,true不一定等於1,false也不一定等於0)
    ECMAScript中的所有型別的值都與這兩個Boolean值等價的值。可以使用Boolean()轉型函式;
    對應false : (String)“” ;(Number) 0 和NaN;(Object)null;(Undefined) undefined

  13. Number型別
    八進位制字面量在嚴格模式下是無效的;
    八進位制字面值的第一位必須會0
    十六進位制字面值的前兩位必須是ox
    浮點數值 必須含有小數點,且小數點後面必須至少有一個數值
    由於儲存浮點數值需要的記憶體空間是儲存整數值的兩倍,因此ECMAScript會不失時機的將浮點數值轉換為整數值,如1.0 10.
    浮點數值的最高精度是17位小數,但在進行算數計算時其精確度遠不如整數,如0.1+0.2 不是0.3,而是0.30000000000004,因此不要測試特定的浮點數值 if(a+b == 0.3){}將不會得到正確結果
    數值範圍
    Number.MIN_VALUE Number.MAX_VALUE 如果超過該數值會轉化為特殊的Infinity值,-Infinity值,即正無窮,負無窮,該值將無法繼續參與下一次的計算,因為Infinity 不是能夠參與計算的數值,要判斷一個數值是不是又窮的,可以使用isFinite() 函式,若引數位於最大與最小數值之間會返回true;
    NaN
    非數值(Not a Number),是一個特殊的值,表示一個本來要返回數值的運算元未返回數值的情況;任何數除以0會返回NaN,但不會影響程式碼的執行(其他語言會停止程式碼的執行)
    NaN 特點:任何實際NaN的操作都會返回NaN,NaN與任何值都不相等,包括NaN本身;
    isNaN()嘗試將接收的值轉換為數值,不能被轉換為數值的值都會導致這個函式返回true
    數值轉換
    Number()、parseInt()和parseFloat()將非數值轉換為數值
    Number()可以用於任何資料型別,後兩個用於將字串轉換為數值
    number()轉化規則:
    其中true false 轉換為1和0;null 返回 0 ; undefined 返回 NaN;
    字串時只包含數字(含浮點格式與十六進格式,但是八進位制會被忽略,因為前導的0被忽略了),轉換為對應的數值;空字串轉換為0;若含有上述以外的字元,將其轉換為NaN;
    如果是物件,會呼叫valueOf()方法,然後按照前面規則轉換,如果結果為NaN,則呼叫toString()方法,再按照前面的規則轉換
    Number()函式在轉換字串時比較複雜且不合理,因此處理整數更常用parseInt()行數
    parseInt()轉化規則
    忽略空格;如果第一個字元不是數字符號或者負號,返回NaN,即空字串會返回NaN;如果是數字,會解析完所有後續字元或者遇到一個非數字字元;如“1234blue”會被轉換為1234 “22.5”會被轉換為22,小數點不是有效的數字字元;並且可以辨別出 十進位制 八進位制 十六進位制 ,超出進位制則會返回NaN 如“0xz”
    書中結果是ECMAScript 3 認為是56 八進位制,ECMAScript 5 認為是0 十進位制但是在瀏覽器裡測試後為 70(parseInt(“070”) ==》 70);因此一定要寫上第二個引數(任何時候):進位制
    parseFloat()轉化規則
    “22.33.5” ==》22.33 從第一個字元開始解析每個字元,一直解析到字串的末尾或者解析到遇到一個無效的浮點數字字元為止
    字串中第一個小數點有效,第二個無效,他後面的字串將被忽略
    parseFloat 始終忽略前導的0(即只解析十進位制,不存在第二個引數);十六進位制的字串始終被轉換成0,

  14. String型別
    字元字面量
    一些特殊的字元字面量,即轉義序列,用於表示非列印字元或其他用途的字元如\n 換行、\t 製表等;
    字串的長度 length屬性; 但是如果字串中含有雙位元組字元,那麼length屬性可能不會精確地返回字串的字元數目
    字串不可變,要改變某個變數儲存的字串,首先銷燬原來的字串,然後再用另一個包含新值的字串填充該變數
    轉換為字串
    toString()方法,該方法會返回相應值的字串表現
    數值、布林值、物件、字串都有該方法,但是null和undefined沒有。
    toString()可以傳入引數:輸出數值的基數,預設為十進位制
    String()方法,轉型函式,能將任何型別的值轉換為字串(過程為如果有toString()方法,則呼叫該方法,如果值為null,則返回’null’,如果值是undefined,則返回”undefined”)
    要把某個值轉換為字串,可以使用加號操作符把他與字串(“”)加在一起

  15. Object型別
    var o = new Object(); 物件:一組資料和功能的集合
    Object每個例項都具有下列屬性和方法
    Constructor :儲存的建立當前物件的函式,對上面的例子就是Object(
    hasOwnProperty(propertyName):用於檢查給定的屬性在當前例項是否存在,入參為字串
    isPrototypeOf(object):用於檢查傳入物件是否是另一個物件的原型
    propertyIsEnumerable(propertyName):用於檢查給定屬性是否能夠使用for-in語句列舉,入參為字串
    toLocaleString():返回物件的字串表示,該字串與執行環境的地區對應
    toString():返回物件的字串表示
    valueOf():返回物件的字串、數值或布林值表示,通常與toString()方法返回值相同
    但是瀏覽器的環境物件,如BOM和DOM中的物件,都屬於宿主物件,是由宿主實現提供和定義的,可能不會繼承Object

  16. 操作符
    能使用於字串、數字值、布林值、甚至物件,應用於物件時,會呼叫物件的valueOf()或toString()方法,以便取得可以操作的值
    一元操作符
    有遞減和遞增操作符:前置和後置型;
    前置時變數的值在語句求值以前改變的,前置操作和執行語句的優先順序相等,整個語句會從左至右被求值;後置時變數的值在語句求值以後才改變;
    應用於字串時,google測試結果為必須是全部是有效數字字元的字串,才會轉換為數字,否則為NaN
    一元加和減操作符
    一元加操作符放在數值前面,對數值不會產生任何影響,不過對非數值應用一元加操作符時,該操作符會像Number()一樣對該值轉換
    一元減操作符應用於數值時,該值會變成負值;應用於非數值時,規則如一元加操作符,最後將得到的數值轉換為負數
    位操作符
    按照記憶體中的位來運算元值,ECMAScript中數值 都是以64位格式儲存,但位操作符並不直接操作64位的值,而是先將64位的值轉換為32位的整數,然後執行操作,最後將結果轉換回64位
    有符號的整數:前31位表示整數的值,第32位表示數值的負號,0為正數,1為負數
    負數為二進位制補碼:步奏如下: 求這個值絕對值的二進位制碼;求二進位制的反碼,0—>1;得到的二進位制反碼加1
    但是ECMAScript會隱藏這些資訊,我們呼叫toString(2)時,返回的是這個負數絕對值的二進位制碼前面加上了一個負號
    對NaN和Infinity 應用位操作時,會被當成0處理;對於非數值應用位操作符時,會先使用Number()將其轉換為一個數值,在應用位操作
    按位非(NOT)
    符號:~;本質:運算元的負號減1;由於按位非是數值的最底層操作,速度更快
    按位與(AND)
    符號:&;
    本質:兩個數值的每一位對其,相同位置上的兩個數執行AND操作;都是1才是1
    按位或(OR)
    符號:|;都是0才是0
    按位異或(XOR)
    符號:^
    兩個數值的對應位上只有一個1才返回1,
    左移
    符號:<<
    空位補0;左移不會影響符號位
    有符號的右移
    符號:>>
    空位補0;右移不會影響符號位
    無符號右移
    符號:>>>
    對正數來說,與有符號的右移結果相同;
    對負數來說,影響較大

  17. 布林操作符
    有三個:非(NOT)、與(AND)、或(OR)
    邏輯非
    符號:!;規則為 物件=>false;空字串=>true;非空字串=>false;0=>true;非0數值=>false;null、NaN、undefined=>true;
    !!(valueBoolean) 與Boolean()方法一致
    邏輯與
    符號:&&
    邏輯與操作可以用於任何型別的運算元。在有一個操作符不是布林值的時候,邏輯與操作就不一定返回布林值;規則如下:
    第一個運算元是物件,返回第二個運算元;
    第二個是物件,只有在第一個運算元的求值結果為true才能返回該物件
    兩個都是物件,返回第二個運算元
    第一個為null、NaN、undefined時,返回第一個

    為短路操作,第一個能決定結果時,不會對第二個運算元求值;不能再邏輯與操作中使用未定義的值
    邏輯或
    符號:||
    求值規則:
    如果第一個運算元是物件,返回第一個運算元
    第一個運算元求值結果為false,返回第二個運算元
    如果兩個都是物件,返回第一個運算元
    如果兩個都是null,或NaN或undefined,則返回null或NaN或undefined

    也是短路操作,因此var myObject = preferredObject || backupObject;
    有一個預設值:backupObject;

  18. 乘性操作符
    有乘法、除法和求模;如果參與乘法計算的某個操作符不是數值,會先使用Number()轉型函式將其轉換為數值
    乘法
    符號:*
    規則如下:
    都是數值,執行常規乘法計算:兩個正數或負數相乘還是正數,只有一個有符號,結果就是負數,超出ECMAScript數值範圍,返回Infinity 或-Infinity
    如果一個是NaN,結果為NaN;如果Infinity與0相乘,結果是NaN;Infinity與非0相乘,結果為Infinity或-Infinity,取決於有符號運算元的符號;
    infinity與infinity相乘,結果是infinity;如果有一個運算元不是數值,則後臺呼叫Number()將其轉換為數值
    除法
    符號:/
    規則如下:
    都是數值,執行常規除法計算:兩個正數或負數相乘還是正數,只有一個有符號,結果就是負數,超出ECMAScript數值範圍,返回Infinity 或-Infinity
    如果一個是NaN,結果為NaN;
    infinity與infinity相除,結果是NaN;0/0 結果是NaN;如果非0的有限數被0除,結果是Infinity或-Infinity,取決有符號運算元的符號;如果是Infinity被任何非零除,則結果為Infinity或-Infinity,取決於有符號運算元的符號
    如果有一個運算元不是數值,則後臺呼叫Number()將其轉換為數值
    求模
    符號:% ;求餘
    規則如下:
    被除數是無窮大而除數是有限大的數值,則結果是NaN;
    被除數是有限大而除數是0,結果是NaN;
    Infinity除以Infinity,結果是NaN;
    被除數是有限大數值而除數是無窮大的數值,結果為被除數
    被除數為0,結果為0;除數為0,結果為NaN
    如果有一個運算元不是數值,則後臺呼叫Number()將其轉換為數值,然後應用上面的規則

  19. 加行操作符
    加法
    規則如下:

    • 如果都是數值,執行常規的加法計算,然後由下列規則返回結果
      如果一個為NaN,結果為NaN;如果Infinity加Infinity,則為Infinity;如果-Infinity加-Infinity,則為-Infinity;如果是Infinity加-Infinity,則為NaN;
      如果+0加+0,結果為+0;如果-0加-0,結果為-0;如果+0加-0,結果為+0;
    • 如果有一個運算元是字串,規則如下:
      1. 都是字串,拼接起來即可
      2. 只有一個是字串,另一個轉換為字串,拼接起來
    • 如果有一個是物件、數值或布林值,則呼叫他們的toString()方法取得相應的字串值,再應用前面的字串規則。對於undefined和null,則分別呼叫String()函式並取得字串“undefined”和“null”
      減法
      符號:-
      規則如下:
      • 操作符都是數值,執行常規算術減法操作返回結果
      • 一個為NaN,結果為NaN
      • Infinity減Infinity,結果為NaN
      • -Infinity減-Infinity,結果為NaN
      • Infinity減-Infinity,結果為Infinity
      • -Infinity減Infinity,結果為-Infinity
      • +0減+0 結果+0;+0減-0,結果-0;-0減-0,結果+0
      • 如果一個為字串、布林值、null或undefined,先在後臺呼叫Number()轉換為數值,在執行前面的規則
      • 如果一個運算元是物件,呼叫valueOf()以取得表示該物件的數值,如果得到NaN,則結果為NaN,沒有valueOf()方法,則呼叫toString()方法並將得到的字串轉換為數值
  20. 關係操作符
    < > <= >=
    規則如下

    • 兩個運算元都是數值,執行數值比較
    • 兩個運算元都是字串,比較兩個字串對應的字元編碼值
    • 一個為數值,將另一個轉為數值,再執行比較
    • 一個為物件,呼叫valueOf()方法,再按照前面的規則執行比較,如果沒有valueOf()方法, 則呼叫toString()方法,並執行前面比較
    • 一個為布林值,轉換為數值,在執行比較
      “23”< 3 false; “23”<”3” true;
      “a” < 3 false; a 被轉化為NaN,任何數與NaN進行比較,結果都是false;
  21. 相等操作符
    相等和不相等——先轉換再比較;全等和不全等——僅比較而不轉換
    相等和不相等
    符號: == 和 !=
    先轉換運算元,在比較相等性;規則如下:

    • 有一個是布林值,比較之前先轉換為數值,false轉換為0,true轉換為1
    • 如果一個為字串,一個為數值,比較前先將字串轉換為數值
    • 一個為物件,一個不是,先將物件呼叫valueOf()方法,在按照前面規則進行
    • null和undefined是相等的
    • 比較之前,不能將null和undefined轉換成其他任何值
    • 一個運算元為NaN,相等操作符返回false,不相等,返回true;NaN == NaN fasle
    • 都為物件,比較是否是同一物件,只想同一物件,返回true,否則為false

    全等和不全等
    符號 === 和!==
    規則:

    • 比較之前不轉換運算元
    • null === undefined false 不是一個型別
  22. 條件操作符
    即三木運算子
    var variable = boolean_expression ? true_value :false_value;

  23. 賦值運算子
    符號有: = 右側的值賦給左側的變數;複合賦值 ,等號前面新增 乘性操作符、加性操作符、位操作符

  24. 逗號運算子
    在一條語句中執行多個操作如 var num1 = 1,num2=2,num3=3;
    上面是宣告多個變數,除此之外逗號操作符還可以用於賦值,逗號操作符總會返回表示式的最後一項var num = (1,2,3,4,5)// num的值為5,最後一項