JavaScript基本概念(變量和數據類型)

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。

⑤ 若是是字符串,忽略先後空格,而後遵循如下規則:

      • 若是字符串中只包含數字,則將其轉換爲十進制數值,且忽略前導零,若是是十六進制格式,則將其轉換爲想通大小的十進制整數;
      • 若是字符串爲空,則將其轉換爲0;
      • 其他皆轉換爲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()函數遵循下列轉換規則:

      • 若是值有toString()方法,則調用該方法(沒有參數)並返回相應的結果;
      • 若是值是null,則返回"null";
      • 若是值是undefined,則返回"undefined"。

 

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類型對象遇到 "+" 和 "==" 將默認轉換爲字符串。注意,是否轉換爲字符串取決於對象自己而跟運算符無關。

相關文章
相關標籤/搜索