3.1 語法 ECMAScript 大量借鑒了其他語言的語法 3.1.1 區分大小寫 在ECMAScript中所有的東西都是區分大小寫的 3.1.2 標識符命名標準 標識符:就是 變數 屬性 函數 或者 參數 的名字 第一個字元必須是字母,下劃線_ 或者 美元符 $ 其他字元可以是 字母,下劃線 , ...
3.1 語法
ECMAScript 大量借鑒了其他語言的語法
3.1.1 區分大小寫
在ECMAScript中所有的東西都是區分大小寫的
3.1.2 標識符命名標準
標識符:就是 變數 屬性 函數 或者 參數 的名字
- 第一個字元必須是字母,下劃線_ 或者 美元符 $
- 其他字元可以是 字母,下劃線 ,美元符,數字
按照慣例 ECMA採用 駝峰大小寫格式 : 第一個字母小寫 其他每個單詞 首字母大寫 。
不能把 關鍵詞 保留字 作為標識符
3.1.3 註釋
// 單行註釋 /* 多 行 註 釋 */
3.1.4 嚴格模式
ECMAScript5 引入了 嚴格模式 的概念 在頂部添加
"use static";
嚴格模式下 JavaScript的執行結果會有很大不同
3.1.5 語句
ECMAScript 中 語句以一個 分號結尾 ,
var count = 1; var mat = 2;
可以把多條語句放在一個代碼塊里 , 代碼塊 以 { 開始 } 結尾
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
3.3 變數
ECMASceipt 是 鬆散類型 的 (弱類型)就是 可以用來保存任何類型的數據。 定義變數時要使用 var 操作符, 後面要跟著 標識符
// 定義了 一個名為 message 的 變數
var message;
定義了一個名字為 message 的變數 該變數沒有任何值,會被保存為一個特殊的值 undefined 。 可以在 聲明變數的同時 設置 變數的 值
var message = ”hello word“;
也可以再更改 message 的值 message = 100; 但不推薦這樣做 更改已保存的類型 但 ECMAScript 卻 可以這樣做
如果用 var 定義一個變數 則此變數為該變數所再作用域的局部變數 , 也就是說 如果在一個函數內用var聲明一個變數則 此變數在函數結束後就被 銷毀 。 不過 如果省略 var 操作符 聲明 則創建全局變數
function count(){ var message=100; // 局部變數 } count(); alert(message); // 報錯 function counta(){ hello=100; // 全局變數 } counta(); alert(hello); // 100
雖然 不加var操作符 就可以 聲明全局變數 但不建議這樣做 要儘量少聲明 全局變數 ,以減少混亂。
也可以 使用 一條語句 定義 多個變數
var a=2,b="3",c=1;
3.4 數據類型
ECMAScript有5種簡單的數據類型 也叫 基本數據類型 : Undefined Null Boolean Number String 。 還有 一種複雜類型 Object, object 本質上由一組無序的名和值 組成。 ECMAScript 不支持 自定義類型的機制, 所有的值都是以上六種數據類型之一。
3.4.1 typeof操作符
使用typeof 操作符 可以檢查給定數據的類型 操作符可能返回以下字元串
- ”undefined“ --- 如果這個值未定義 ;
- ”String“ --- 這個值 是 字元串
- "Number" --- 這個值 是 數值
- "Boolean" --- 這個值 是 布爾值
- "Object" --- 這個值 是 對象 或者 null
- "function" --- 這個值是 函數
var app="app"; alert(typeof(app)); // "String" alert(typeof app); // "String" alert(typeof 100); // "Number"
typeof 是操作符 不是函數 所以帶括弧和不帶括弧 是一樣的 。
null 會被認為是一個空的對象引用 所有會返回 object, 函數 在ECMAscript中是對象 ,不是數據類型 但函數也的確有特殊的屬性,因此 typeof 區分 函數 和 其他對象。
3.4.2 Undefined 類型
Undefined類型 只有一個值就是 undefined, 在使用var聲明變數時未將其初始化 (賦值),那麼這個變數的值就為 undefined 。
var message; alert( typeof message); // "undefined"
3.4.3 Null 類型
Null類型是第二給只有一個值的類型,這個值是 null ,從邏輯角度看 null 表示一個空對象指針,因此 typeof 操作符對 null 時會返回 object 。
3.4.4 Boolean 類型
Boolean類型是ECMAScript最常用的類型,此類型有兩個值: false 和 true。 這兩個值和數字值不是一回事 true不一定等於1 ,false不一定等於0 . 想將一個值轉為 Boolean 值 可以使用 Boolean()
var message="Hello word"; alert( Boolean(message) ); // true
以下為 轉換規則:
3.4.5 Number 類型
這種類型使用 IEEE754 格式來表示 整數 和 浮點數值。為支持各種數值類型 ECMA-262 定義了不同數值字面量格式。
最基本的數值字面量格式是 十進位 直接在代碼中輸入數值即可。
除了十進位外,整數還可以通過八進位 或者十六進位的 字面值來表示 , 八進位 第一位必須為0 然後是 八進位數字序列的 0~7 ,如果 字面值 中的數值超出了範圍 則 前導零 會被忽略 後面的數值 按 十進位 解析。 十六進位的開始前兩位必須是 0× 後面跟任何 十六進位序列數 0~9 和 A~F (字母可以大寫也可以小寫),
var intNum=55; //整數 var octalNum1=070; // 八進位的 56 var octalNum2=079 // 無效的八進位數值 解析成 79 var hexNum1=0×A // 十六進位的 10 var hexNum2=0×1f // 十六進位的 31
浮點數值
浮點數值就是 帶有一個小數點的數值,如果 小數點 後沒有任何數字則會被當成整數儲存 。 對於 極大或者極小的 數值可以使用 e 表示法 (科學計數法),
var floatNum=3.123e7; // 等於 31230000
浮點數值的最高精度是17位小數,但在算術計算遠遠不如整數精確 如: 0.2+0.1 不等於 0.3 而是等於 0.30000000000004
數字範圍
ECMAScript 能夠表示最小的數值保存在 Number.MIN_VALUE 中 ,大多數瀏覽器這個值為: 5e-324 ; 能夠表示的最大數值保存在 Number.MAN_VALUE 里
如果一個數計算超過最大範圍則這個值將自動轉換為特殊的 Infinty 值 如果 小於 最小範圍值則 轉換為 -Infinity 值 。 使用 isFinte() 函數 可以 返回這個值是否在正常範圍
NaN
NaN 即 非數值 是一個特殊的值, 這個數值表示 本來要返回數值的操作數未返回數值的情況 。 在其他語言 任何數除以0 都會報錯 但在ECMAscript中去會返回 NaN 這樣就不會報錯
NaN 和 任何值 都不相等 包括 本身 。 isNaN() 函數可以 判斷 一個值 是否 不是數值 ,如果是數值或者可以轉換為數值則 返回 false。
數值轉換
有3個函數可以把非數值轉換為數值: Number() , parseInt() , parseFloat() 。 第一個函數可以用於任何類型 後兩個函數只用於將 字元串 類型
Number() 函數 轉換規則 如下
如果是 Boolean的 值 true 轉為 1 ,false轉為 0
如果是 數字值 ,只是簡單的 傳入 和 返回
如果是 null 只是 返回 0
如果是undefined 則返回 NaN
如果是 字元串 則有以下規則
如果字元串中只有數字 則將其轉為 十進位數值
如果 字元串 包含有效的 浮點數 格式 則轉換為對應的浮點數值
如果 字元串 包含有效的十六進位格式 則轉為十六進位
如果 字元串 是空的 則 轉換為 0
如果字元串包含的是除以上的格式外 則轉換為 NaN