1. 變量javascript
在局部做用域中省略var操做符能夠定義全局變量,可是這麼作會致使該變量難以維護,且在嚴格模式下會致使拋出ReferenceError錯誤。java
2. 數據類型(js共用6種數據類型,分別是 Undefined,Null,Boolean,Number,String,Object)正則表達式
2.1 typeof操做符數組
對一個值使用typeof操做符可能會返回下列某個字符串:瀏覽器
□ "undefined" ---若是這個值未定義或者未初始化;函數
□ "boolean" ---若是這個值是布爾值;測試
□ "string" ---若是這個值是字符串;spa
□ "number" ---若是這個值是數值;指針
□ "object" ---若是這個值是對象或null;對象
□ "function" ---若是這個值是函數;
注:若是這個值是正則表達式,舊瀏覽器會返回"function",新瀏覽器會返回"object"。
2.2 Undefined類型
var message; // 這個變量聲明以後默認取得了 undefined 值 // 下面這個變量並無聲明 // var age; alert(message); // "undefined" alert(age); // 產生錯誤 alert(typeof message); // "undefined" alert(typeof age); // "undefined"
2.3 Null類型
① null值從邏輯上表示一個空對象指針,因此 typeof null 返回 "object",可是null instanceOf Object返回false;
② 實際上undefined值派生自null值,所以ECMA-262規定對它們的相等性測試要返回true,即 null == undefined 爲true;
③ 當定義的變量在未來用於保存對象,那麼最好將該變量初始化爲null。
④ 最好使用null來初始化那些想將其暫時設置爲空值的變量。
2.4 Boolean類型
任何一種數據類型均可以調用Boolean()函數,在一些流控制語句(如if語句,while語句等)會自動執行相應的Boolean轉換
數據類型 | 轉換爲true的值 | 轉換爲false的值 |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零數字值(包括無窮大) | 0和NaN |
Object | 任何對象 | null |
Undefined | 不適用 | undefined |
2.5 Number類型
2.5.1 整數
① 八進制數以0開頭,若後面的數值超出範圍,那麼前導零將被忽略,後面的數值當成十進制數值解析(如 070解析爲56;079解析爲79),且八進制字面量在嚴格模式下是無效的,會報錯。
2.5.2 浮點數值
① js保存浮點數值須要的內存空間是保存整數值的兩倍(4*2=8字節),如下兩種狀況下浮點數會被解析成整數
var a = 1.; // 小數點後面沒有數字,解析爲1 var b = 10.0 // 解析爲10
② 浮點數值最高精度是17位小數,且進行算術運算時精確度遠遠不如整數,如0.1加0.2結果不是0.3 ,而是0.30000000000000004
③ 儘量不用除法(/)和模(%)運算,由於大多數狀況下它們直接致使出現浮點數。若是必須使用除法,當即用Math.round()方法迴歸整數運算。
2.5.3 數值範圍
① ECMAScript能表示的最大值儲存在Number.MAX_VALUE上;最小值儲存在Number.MIN_VALUE上(能表示的最接近0的數,值爲5e-324);超過這個範圍視爲無窮,其中正無窮表示爲Infinity,負無窮表示爲-Infinity,判斷一個數是不是有窮的,可使用 isFinite() 函數,返回true則是有窮的。
2.5.4 NaN
① NaN,即非數值是一個特殊的數值,這個數值用於表示一個原本要返回數值的操做數未返回數值的狀況(這樣就不會拋出錯誤了)
② 任何涉及NaN的操做(例如NaN/10)都會返回NaN,且NaN與任何值都不相等,包括NaN自己。
③ isNaN()函數接受一個任何數據類型的參數,該函數會幫咱們肯定這個參數是否能被轉換爲一個數值,且該函數用於對象時會自動調用對象的valueOf()方法,而後肯定返回的值是否能夠轉換爲數值,若是不能,則基於這個返回值再調用toString()方法,再測試返回值。
2.5.5 數值轉換
Number(param):參數param能夠是任何數值類型,其轉換規則以下
① 若是是Boolean值,true和false分別轉換爲 1 和 0 。
② 若是是數字,只是簡單的傳入和返回。
③ 若是是null,返回0。
④ 若是是undefined,返回NaN。
⑤ 若是是字符串,忽略先後空格,而後遵循如下規則:
⑥ 若是是對象,先調用對象的valueOf()方法,若返回原始值,則依照前面的規則轉換,不然調用對象的toString()方法,若返回原始值則再依照上面的規則轉換,不然將拋出錯誤。
parseInt(string, radix):參數string爲字符串(能夠爲數字),radix爲基數。轉換時,它會忽略前面的空格,直至遇到第一個數字字符或者負號,若不是返回NaN,如果則繼續解析第二個字符知道遇到非數字字符,另外,ECMAScript3識別以0開頭的八進制數,ECMAScript5不識別,如下是例子。
如下結果均返回15:
parseInt(" 0xF", 16); parseInt(" F", 16); parseInt("17", 8); parseInt("178", 8); parseInt(021, 8); //注意這裏021是數字不是字符串, parseInt("021", 8)返回的是17 parseInt("015", 10); parseInt(15.99, 10); parseInt("FXX123", 16); parseInt("1111", 2); parseInt("15*3", 10); parseInt("15e2", 10); parseInt("15px", 10); parseInt("12", 13);
如下結果返回NaN
parseInt("Hello", 8); parseInt("546", 2);
如下結果在ECMAScript3返回0,在ECMAScript5返回8
parseInt("08");
parseFloat(string):parseFloat()與parseInt()相似,可是它始終都會忽略前導的零,且解析十六進制給事的字符串始終會被轉換成0,若是字符串包含的是一個可解析爲整數的數,parseFloat()會返回整數。toFixed(num)、toExponential(num)、toPrecision(num): 這是屬於Number類的三個函數,可使用它們對數字的精度進行調整並輸出字符串,它們的參數各自接收一個數字,具體例子以下:
var n = 123456.789; n.toFixed(0); // "123457" n.toFixed(2); // "123456.79" n.toFixed(5); // "123456.78900" n.toExponential(1); // "1.2e+5" n.toExponential(3); // "1.235e+5" n.toPrecision(4); // "1.235e+5" n.toPrecision(7); // "123456.8" n.toPrecision(10); // "123456.7890"
2.5.6 String類型
① 字符串的特色:
var lang = "Java"; lang = lang + "Script";
以上示例中實現的操做過程以下:首先建立一個能容納10個字符的新字符串,而後在這個字符串中填充"Java"和"Script",最後一步是銷燬原來的字符串"Java"和字符串"Script",由於這兩個字符串已經沒用了。
② 轉換爲字符串:
toString():除了null和undefined,其餘數值類型都有這個方法,多數狀況下該方法沒必要傳遞參數。可是在調用數值的toString()方法時,能夠傳遞一個參數:輸出數值的基數。如
var num = 10; alert(num.toString()); // "10" alert(num.toString(2)); // "1010" alert(num.toString(8)); // "12" alert(num.toString(16)); // "a" alert(233.toString(16)); // 報錯 alert((233).toString(16)); // "e9"
String(param):String()函數遵循下列轉換規則:
2.5.7 Object類型
Object是全部對象的基礎,所以全部對象都具備如下這些基本屬性和方法:
constructor , hasOwnProperty(propertyName) , isPrototypeOf(object) , propertyIsEnumerable , toLocaleString() , toString() , valueOf()
① toString():數組類的toString()方法將每一個數組元素轉換爲一個字符串,並在元素之間添加逗號後合併成結果字符串;函數類的toString()方法返回這個函數的源碼字符串;日期類的toString()方法返回一個可讀的日期和時間字符串;RegExp類的toString()方法將RegExp對象轉換爲表示正則表達式直接量的字符串。
② valueOf():大多數對象的valueOf方法返回的是對象的自己,Date類型返回1970年1月1日以來的毫秒數。
③ 對象轉換爲字符串先調用toString()方法,若返回原始值則把改值轉換成字符串,不然調用valueOf()方法,若返回原始值則轉換爲字符串,若都不爲原始值,報錯。對象轉換成數值也同樣,不一樣點在於先調用的是valueOf()方法。
④ "+" 和 "==" 做爲對象的運算符時不會像其餘運算符那樣默認把對象轉換爲數值,而是按照對象自己的原始值類型進行轉換,如Date類型對象遇到 "+" 和 "==" 將默認轉換爲字符串。注意,是否轉換爲字符串取決於對象自己而跟運算符無關。