JavaScript學習筆記—— 3. JavaScript基本概念

來源:互聯網
上載者:User

標籤:包括   第一個   第三版   學習   32位   轉型   作用   最好   local   

1.     ECMAScript中的一切(變數、函數名和操作符)都區分大小寫。
2.     標識符:指變數、函數、屬性的名字,或者函數的參數。
  • 第一個字元必須是一個字母、一個底線( _ )或者一個貨幣符號($);
  • 其他字元可以使字母、底線、貨幣符號或者數字。
  • 按照慣例,ECMAScript標識符採用駝峰大小寫格式。
3.     strict 模式:*use strict*,可以在指令碼中啟用strict 模式,寫在代碼頂部。4.     ECMAScript中的語句採用一個分號作為結尾。雖然並不必需,但是可以用來避免錯誤(不完整輸入etc),某些情況下可以增加代碼的效能(解析器不需要推測哪裡需要分號)。5.     變數:ECMAScript中的變數是鬆散型的,即可以用來儲存任何類型的資料——每個變數僅僅是一個用於儲存值的預留位置而已。
  • var 變數名;
  • 省略var操作符可以定義全域變數,但是並不推薦。因為在局部範圍中定義的全域變數難以維護,而且如果有意的忽略了var操作符,也會由於變數不會馬上就有定義(definition)而導致不必要的混亂。給未經聲明的變數賦值在strict 模式下會導致拋出ReferenceError錯誤。
6.     資料類型:ECMAScript中有5種單一資料型別(基礎資料型別 (Elementary Data Type)):Undefined, Null, Boolean, Number, String以及一種複雜資料類型Object。
  • typeof操作符用於檢測給定變數的資料類型
  • typeof null會返回object,因為特殊值null被認為是一個空的對象引用
7.     undefined類型只有一個值,即特殊的undefined。這個值是由ECMA-262第三版引入的,用於區分Null 物件指標和未經初始化的變數。但是,包含undefined值的變數與尚未定義的變數並不一樣。
  • var message;表示“定義了一個變數,名為message,但是未初始化”,使用alert(message)會顯示message變數的值,為“undefined”;
  • 如果沒有“var message”,則表示所謂的message變數並沒有被定義,即message變數本質上並不存在,使用alert(message);會產生錯誤。
  • 但是對於未初始化的變數執行typeof操作符會返回undefined值,對於未聲明(未定義)的變數執行typeof操作符同樣會返回undefined值。
  • 所以,即便未初始化的變數會被自動賦予undefined值,但是顯式地初始設定變數仍然值得推薦,因為typeof操作符對這個變數進行操作的時候,我們就可以立即知道被檢測的變數還沒有被聲明,而不是沒有被初始化(例子:應該使用var message = “example”)。
  • 注意“初始化”和“被聲明”兩者的區別。
8.     null類型也只有一個值,即特殊的null。從邏輯角度來看,null值表示一個Null 物件指標,所以typeof null會返回“object”。
  • 如果定義的變數準備在將來用於儲存對象,那麼最好將該變數初始化為null而非其他值,以方便檢查null值就可以知道該變數是否儲存了一個對象的引用(if (car != null))
9.     ECMAScript中所有類型的值都有與boolean值等價的值,即var message = “Hello”; var messageAsBoolean = Boolean(message);    message字串被轉換成了一個Boolean值,被儲存於messageAsBoolean中。10.  浮點數值的最高精度是17位小數,但是在進行算數計算時其精確度遠遠不如整數,所以不要做if (a + b == 0.3)類似的操作。永遠不要測試某個特定的浮點數值。11.  NaN(Not a Number)用來表示一個本來要返回數值的運算元未返回數值的情況。在ECMAScript中,任何數值除以0都會返回NaN,因此不會影響其他代碼的執行。
  • 任何涉及NaN的操作都會返回NaN
  • NaN和任何值都不相等,包括NaN本身。
  • isNaN()函數,可以接受一個參數,該參數可以使任何類型,而該函數可以用來協助確定這個參數是否“不是數值”。
12.  有3個函數可以把非數值轉換為數值:Number()、parseInt()和parseFloat()。第一個用於任何資料類型,後兩者專門用於把字串轉換為數值。13.  parseInt()函數在處理字串時,會忽略字串前面的空格,直至找到第一個非空白字元,如果第一個字元不是數字字元或者負號,parseInt()返回NaN;如果第一個字元是數字字元,parseInt()會繼續解析第二個字元,直到解析完所有後續字元或者遇到了一個非數字字元;小數點並非一個有效數字字元。常會給parseInt函數提供第二個參數作為轉換時使用的基數(即多少進位):var num = parseInt(“AF”, 16); 。為了避免解析錯誤,建議無論什麼情況下都明確指定基數,所以始終將10作為第二個參數是必要的,當常用十進位數值時。14.  String()函數:
  • 如果值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;
  • 如果值是null,則返回“null”;
  • 如果值是undefined,則返回“undefined”
15.  在ECMAScript中,Object類型是所有它的執行個體的基礎,即Object類型所具有的任何屬性和方法也同樣存在於更具體的對象中。Object的每個執行個體都具有下列屬性和方法:
  • Constructor:儲存著用於建立當前對象的函數。
  • hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象執行個體中(而非執行個體的原型中)是否存在。其中propertyName必須以字串形式指定(o.hasOwnProperty("name”));
  • isPrototypeOf(object):用於檢查傳入的對象是否是另一個對象的原型;
  • propertyIsEnumberable(propertyName):用於檢查給定的屬性是否能夠使用for-in語句來枚舉,屬性名稱必須以字串形式指定;
  • toLocaleString():返回對象的字串表示,該字串與執行環境的地區對應;
  • toString():返回對象的字串表示;
  • valueOf():返回對象的字串、數值或者布爾值表示。
16.  一元遞增和遞減操作符規則:
  • 在應用於一個包含有效數字字元的字串時,現將其轉換為數值,再執行加減1的操作— 字串變數變成數值變數;
  • 在應用於一個不包含有效數字字元的字串時,將變數的值設定為NaN— 字串變數變成數值變數;
  • 在應用於布爾值false時,現將其轉換為0再執行加減1的操作— 布爾值變數變成數值變數;
  • 在應用於布爾值true時,現將其轉換為1再執行加減1的操作— 布爾值變數變成數值變數;
  • 在應用於浮點數值時,執行加減1的操作;
  • 在應用於對象時,先調用對象的valueOf()方法以取得一個可供操作的值,然後對該值應用前述規則。如果結果是NaN,則在調用toString()方法後再應用前述規則— 物件變數變成數值變數。
17.  一元加和減操作符:
  • 對非數值應用一元加操作符時,該操作符會像Number()轉型函數一樣對這個數值執行轉換;
  • 對非數值應用一元減操作符時,遵循一元加操作符規則,最後將得到的數值轉換為負數。
18.  按位非(NOT)
  • 按位非操作由一個波浪線(~)表示,執行結果是返回數值的反碼:25(00000000000...1101)則~25(11111111...0010),最終結果與num1 = 25; -num1 - 1的結果相同,但是按位非在數值表示的最底層執行操作,所以速度更快。 
19.  按位與(AND)
  • 按位與操作符由一個和號字元(&)表示,他有兩個運算元。本質上就是講兩個數值的每一個位對齊,然後做出AND操作(兩個1返回1,否則返回0)
20.  按位或(OR)
  • 由(|)表示,類似與AND,但是僅0和0返回0
21.  按位異或(XOR)
  • 由一個插入符號(^)表示,有兩個運算元,如果是同1(兩個1)或者同0(兩個0),返回0,否則返回1
22.  左移
  • 由兩個小於符號(<<)表示,這個操作符會將指定數值的所有位向左移動指定位元:var oldValue = 2; var newValue = oldValue << 5 則會將10變為1000000.
  • 左移不會影響運算元的符號位,所以-2向左移動5位,會返回-64
23.  有符號的右移
  • 有符號的右移動操作符由兩個大於符號(>>)表示,將數值向右移動,但是保留符號位。
24.  無符號右移
  • 無符號右移由三個大於符號(>>>)表示,這個操作符會將數值的所有32位都像右移動。對正數來說,與有符號右移相同。但是對於負數而言,由於無符號右移以0來填充空位,而非以符號位的值來填充空位,且無符號右移操作符會把負數的二進位碼當做正數的二進位碼,會導致無符號右移後的結果非常大
25.  邏輯非操作符可以用來將一個值轉換為與之對應的布爾值,而同時用兩個邏輯非操作符,時間上就會類比Boolean()轉型函數的行為,第一個邏輯非操作會基於無論什麼運算元返回一個布爾值,而第二個邏輯非操作則對這個布爾值求反,即可得到這個值真正對應的布爾值。26.  邏輯或的賦值: var myObject = preferredObject || backupObject;
  • 表示只有在preferredObject不包含有效值的情況下,給myObject賦予後備值
27.  ECMAScript中不含有塊級範圍;   Not End Yet... 

JavaScript學習筆記—— 3. JavaScript基本概念

聯繫我們

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