1)基本概念
a) 語句(statement)是為了完成某種任務而進行的操作,語句以分號結尾,一個分號就表示一個語句結束。;如:var a = 1;
b) 表達式(expression),指一個為了得到返回值的計算式。如:1+3
c) 變量是對“值”的引用,使用變量等同於引用一個值。var a = 1;變量存在聲明和賦值兩個過程,var a = 1;等價於 var a;a = 1;
如下申明一個已存在的變量是無效的,
var x = 1;
var x;
x // 1
但是,如果第二次聲明的同時還賦值了,則會覆蓋掉前面的值。
var x = 1; var x = 2; // 等同於 var x = 1; var x; x = 2;
avaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然後再一行一行地運行。這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升。
console.log(a); var a = 1;
//等同於
var a;
console.log(a);
a = 1;
請注意,變量提升只對var
命令聲明的變量有效,如果一個變量不是用var
命令聲明的,就不會發生變量提升。
d) 標識符(identifier)是用來識別具體對象的一個名稱。最常見的標識符就是變量名,以及後面要提到的函數名。JavaScript語言的標識符對大小寫敏感,所以a
和A
是兩個不同的標識符。
標識符命名規則如下:
$
)和下劃線(_
)。0-9
。e) 數據類型如下(據說ES6有增加新的數據類型,這裡不討論):
true
(真)和false
(假)兩個特定值f) 對象又可以分成三個子類型。
g) typeof運算符 (typeof
運算符可以返回一個值的數據類型)
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f
// "function"
typeof undefined
// "undefined"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
既然 typeof
對數組(array)和對象(object)的顯示結果都是object
,那麼怎麼區分它們呢?
h)instanceof運算符(屬於某個類型的實例)
var o = {}; var a = []; o instanceof Array // false a instanceof Array // true
i)null和undefinednull
與undefined
都可以表示“沒有”,含義非常相似。將一個變量賦值為undefined
或null
,老實說,語法效果幾乎沒區別。
首先,null像在Java裡一樣,被當成一個對象。但是,JavaScript的數據類型分成原始類型和合成類型兩大類,Brendan Eich覺得表示"無"的值最好不是對象。
其次,JavaScript的最初版本沒有包括錯誤處理機制,發生數據類型不匹配時,往往是自動轉換類型或者默默地失敗。Brendan Eich覺得,如果null
自動轉為0,很不容易發現錯誤。
因此,Brendan Eich又設計了一個undefined
。他是這樣區分的:null
是一個表示"無"的對象,轉為數值時為0;undefined
是一個表示"無"的原始值,轉為數值時為NaN
。