原文地址:zclzone.comjavascript
ECMAScript 的語法大量借鑑了C 及其餘類C 語言(如Java 和Perl)的語法。
熟悉這些語言的開發人員在接受ECMAScript 更加寬鬆的語法時,必定會有一種輕鬆自在的感受。
即便沒有其餘編程語言基礎,JavaScript仍然易上手。
複製代碼
ECMAScript 中的一切(變量、函數名和操做符)都區分大小寫。
變量名test 和變量名Test 分別表示兩個不一樣的變量。
複製代碼
標識符,就是指變量、函數、屬性的名字,或者函數的參數,規則:
1. 第一個字符必須是一個字母、下劃線(_)或一個美圓符號($)
2. 其餘字符能夠是字母、下劃線、美圓符號或數字
3. 不容許是關鍵字、保留字、true、false和null
複製代碼
ECMAScript 標識符采用駝峯大小寫格式:java
var myBlog
var doSomethingImportant
複製代碼
//單行註釋
/* * 這是一個多行 * (塊級)註釋 */
複製代碼
雖然上面多行註釋中的第二和第三行都以一個星號開頭,但這不是必需的。之因此添加那兩個星號,純粹是爲了提升註釋的可讀性
複製代碼
ECMAScript 中的語句以一個分號結尾;若是省略分號,則由解析器肯定語句的結尾,以下例所示:編程
var sum = a + b // 即便沒有分號也是有效的語句——不推薦
var diff = a - b // 有效的語句——推薦
複製代碼
加上分號也會在某些狀況下增進代碼的性能,由於這樣解析器就沒必要再花時間推測應該在哪裏插入分號了
複製代碼
儘可能始終在控制語句中使用代碼塊——即便代碼塊中只有一條語句瀏覽器
// 有效但容易出錯,不要使用
if (test)
alert(test)
// 推薦使用
if (test) {
alert(test)
}
複製代碼
在控制語句中使用代碼塊可讓編碼意圖更加清晰,並且也能下降修改代碼時出錯的概率
複製代碼
ECMAScript 的所有關鍵字編程語言
break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try函數
保留字:性能
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測試
ECMAScript 的變量是鬆散類型的,所謂鬆散類型就是能夠用來保存任何類型的數據。ui
可使用一條語句定義多個變量,只要像下面這樣把每一個變量(初始化或不初始化都可)用逗號分隔開便可:
複製代碼
var message = 'hi',
found = false,
age = 29
複製代碼
5 種簡單數據類型(也稱爲基本數據類型):this
1 種複雜數據類型: Object
typeof——用來檢測給定變量的數據類型的操做符
例:
var message = 'some string'
console.log(typeof (message)) // "string"
console.log(typeof message) // "string"
console.log(typeof 95) // "number"
複製代碼
注意:typeof 是一個操做符而不是函數,所以例子中的圓括號儘管可使用,但不是必需的
複製代碼
Undefined 類型只有一個值,即特殊的 undefined。在使用 var 聲明變量但未對其加以初始化時, 這個變量的值就是 undefined,例如:
var message
console.log(message == undefined) //true
複製代碼
Null 類型是第二個只有一個值的數據類型,這個特殊的值是 null。從邏輯角度來看,null 值表示一個空對象指針,而這也正是使用 typeof 操做符檢測 null 值時會返回"object"的緣由,以下面的例子所示:
var car = null
console.log(typeof car) // "object"
複製代碼
實際上,undefined 值是派生自 null 值的,所以 ECMA-262 規定對它們的相等性測試要返回 true:
console.log(null == undefined) //true
複製代碼
該類型只有兩個字面值:true 和 false。 雖然 Boolean 類型的字面值只有兩個,但 ECMAScript 中全部類型的值都有與這兩個 Boolean 值 等價的值。要將一個值轉換爲其對應的 Boolean 值,能夠調用轉型函數 Boolean(),以下例所示:
var message = 'Hello world!'
var messageAsBoolean = Boolean(message)
console.log(messageAsBoolean) //true
複製代碼
數據類型 | 轉換爲 true 的值 | 轉換爲 false 的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ''(空字符串) |
Number | 任何非零數字值(包括無窮大) | 0 和 NaN |
Undefined | 不適合這種規則 | undefined |
Number 類型使用 IEEE754 格式來表示 整數和浮點數值(浮點數值在某些語言中也被稱爲雙精度數值)。
所謂浮點數值,就是該數值中必須包含一個小數點,而且小數點後面必須至少有一位數字 因爲保存浮點數值須要的內存空間是保存整數值的兩倍,所以 ECMAScript 會不失時機地將浮點數值 轉換爲整數值。顯然,若是小數點後面沒有跟任何數字,那麼這個數值就能夠做爲整數值來保存。一樣 地,若是浮點數值自己表示的就是一個整數(如 1.0),那麼該值也會被轉換爲整數,以下面的例子所示:
var floatNum1 = 1 // 小數點後面沒有數字——解析爲 1
var floatNum2 = 10.0 // 整數——解析爲 10
複製代碼
浮點數值的高精度是 17 位小數,但在進行算術計算時其精確度遠遠不如整數。例如,0.1 加 0.2 的結果不是 0.3,而是 0.30000000000000004。這個小小的舍入偏差會致使沒法測試特定的浮點數值。 例如:
if (a + b == 0.3) {
console.log('You got 0.3.') // 不要作這樣的測試!
}
複製代碼
在這個例子中,咱們測試的是兩個數的和是否是等於 0.3。若是這兩個數
是 0.05和 0.25,或者是 0.15 和 0.15都不會有問題。而如前所述,如
果這兩個數是 0.1和 0.2,那麼測試將沒法經過。所以,永遠不 要測試某
個特定的浮點數值。
複製代碼
因爲內存的限制,ECMAScript 並不能保存世界上全部的數值。ECMAScript 可以表示的小數值保 存在 Number.MIN_VALUE 中——在大多數瀏覽器中,這個值是 5e-324;可以表示的大數值保存在 Number.MAX_VALUE 中——在大多數瀏覽器中,這個值是 1.7976931348623157e+308。若是某次計算的 結果獲得了一個超出 JavaScript 數值範圍的值,那麼這個數值將被自動轉換成特殊的 Infinity 值。具 體來講,若是這個數值是負數,則會被轉換成-Infinity(負無窮),若是這個數值是正數,則會被轉 換成 Infinity(正無窮)。
若是某次計算返回了正或負的 Infinity 值,那麼該值將沒法繼續參與下一次的計算,
由於 Infinity 不是可以參與計算的數值
複製代碼
NaN,即非數值(Not a Number)是一個特殊的數值,這個數值用於表示一個原本要返回數值的操做數 未返回數值的狀況(這樣就不會拋出錯誤了)
怕什麼真理無窮,進一寸有進一寸的驚喜~