【JavaScript】數據類型

2.4 數據類型

ECMAScript中有5種簡單數據類型(基本數據類型):Undefined、Null、Boolean、Number和String。還有1種複雜數據類型--Object,Object本質上是由一組無序的名值對組成的。函數

2.4.1 typeof操做符指針

typeof操做符用來檢測給定變量的數據類型,可能的返回值:code

"undefined" 這個值未定義
"boolean" 這個值是布爾值
"string" 這個值是字符串
"number" 這個值是數值
"object" 這個值是對象或null
"function" 這個值是函數
例子:對象

var name = 'tg';
console.log(typeof name);  // "string"
console.log(typeof (name));  // "string"
console.log(typeof {}); // "object"

typeof是一個操做符,後面的圓括號無關緊要。ip

2.4.2 Undefined類型內存

Undefined類型只有一個值,即特殊的undefined。字符串

若是在使用var聲明變量但未對其加以初始化時,這個變量的值就是undefined。原型

var name;
console.log(name == undefined);  // true

對於未聲明過的變量,只能執行一項操做,即便用typeof操做符檢測其數據類型(對未聲明的變量調用delete不會致使錯誤(在非嚴格模式下))string

2.4.3 Null類型it

Null類型也是隻有一個值的數據類型,這個特殊值就是null。null值能夠看做是一個空對象指針。

console.log(typeof null);  // "object"

undefined實際上是派生自null值:

console.log(null == undefined);  // true

2.4.4 Boolean類型

Boolean類型有兩個字面值:true和false,兩個值是區分大小寫的。

要將一個值轉換爲其對應的Boolean值,可以使用轉型函數Boolean():

var name = 'tg';
console.log(Boolean(name);  // true

能夠對任何類型的值調用Boolean函數,並且總會返回一個Boolean值(true或false)

轉換規則:

  • 對於true或false,返回原值(true或false)

  • 對於String類型的值,任何非空字符串返回true,空字符串("")返回false

  • 對於Number類型的值,任何非零數字值(包括無窮大),返回true;0和NaN返回false

  • 對於Object類型的值,任何對象返回true,null返回false

  • 對於Undefined類型,undefined返回false(只有一個值)

2.4.5 Number類型

最基本的數值字面量格式是十進制整數。

var num = 15;

八進制(以8爲基數) 以0開頭,後面是(0~7)

var num = 070;  // 八進制的56

十六進制(以16爲基數) 以0x開頭,後面是(0~9及A~F),字母A~F能夠大小寫。

var num = 0xA;  //十六進制的10

注意:在進行算術計算時,全部以八進制和十六進制表示的數值都會被轉換成是十進制。

1.浮點數值

浮點數值指包含一個小數點,而且小數點後面必須至少有一個數字。

var floatNum = 1.1;

保存浮點數值須要的內存空間是保存整數值的兩倍。

對於那些極大或極小的數值,咱們可使用科學計數法(e表示法)來表示浮點數值。

e表示法表示的數值等於e前面的數值乘以10的指數次冪:

var floatNum = 3.125e7;  // 31250000
var floatNum1 = 3e-7;  //0.0000003

默認狀況下,ECMAScript會將那些小數點後面帶有6個零以上的浮點數值轉換爲以e表示的數值。

var floatNum1 = 3e-7;  //0.0000003

浮點數的最高精度是17位小數。

0.1 + 0.2 = 0.3000000000000004; // 不是等於0.3

2.數值範圍

基於內存的限制,ECMAScript只能保存有限的數值。
ECMAScript可以表示的最小數值保存在Number.MIN_VALUE(最小值)中,這個值是5e-324;可以表示的最大數值保存在Number.MAX_VALUE(最大值)中,這個值是1.7976931348623157e+308.

若是某次計算的結果獲得了一個超出JavaScript數值範圍的值,那麼這個數值就會被轉換成特殊的Infinity值;若是這個值是負數,則會被轉換爲-Infinity(負無窮),若是這個數值是整數,則會轉換成Infinity(正無窮)。

注意:Infinity是不能參與計算的數值。

用isFinite()來判斷這個值是否無窮,該函數接受一個參數。若是參數位於最小與最大數值之間,返回true。

console.log(isFinite(1));  //true
console.log(isFinite(Infinity));  // false

3.NaN

NaN(Not a Number)表示非數值,這個數值用於表示一個原本要返回數值的操做數未返回數值的狀況。

注意點:

  • 任何涉及NaN的操做都會返回NaN。

  • NaN與任何值都不相等,包括NaN自己。

console.log(NaN == NaN);  //false

咱們能夠用isNaN()函數來判斷是否非數值,該函數接受一個參數,能夠是任何類型。

console.log(isNaN(NaN));  // true

isNaN()在接收到一個值(能夠是任何類型)以後,會嘗試將這個值轉換爲數值,某些不是數值的值會直接轉換爲數值,好比:字符串"10"或Boolean值。而任何不能被轉換爲數值的值都會致使這個函數返回true。

console.log(isNaN(NaN));  // true
console.log(isNaN(10));  // false
console.log(isNaN('blue'));  //  true

4.數值轉換

有3個函數能夠把非數值轉換爲數值:Number()、parseInt()和parseFloat()

轉型函數Number()能夠用於任何數據類型,後面兩個是專門用於把字符串轉換爲數值。

Number()函數的轉換規則:

  • 若是是Boolean值,true和false將分別轉換爲1和0

  • 若是是數字值,只是簡單的傳入和返回

  • 若是是null值,返回0

  • 若是是undefined,返回NaN

  • 若是是字符串中只包含數字(包括前面帶正負號),則將其轉換爲十進制數值(前導的零會被忽略)

  • 若是字符串中包含有效的浮點格式,如1.1,則將其轉換爲對應的浮點數值

  • 若是字符串中包含有效的十六進制,如0xf,則將其轉換爲相同大小的十進制數值

  • 若是字符串是空的,返回0

  • 若是字符串中包含上述格式之外的字符,返回NaN

  • 若是是對象,則調用對象的valueOf()方法,而後依照前面的規則轉換返回的值。若是轉換的結果是NaN,則調用對象的toString()方法,而後再次依照前面的規則轉換返回字符串值

console.log(Number('tg'));   // NaN
console.log(Number(''));   // 0
console.log(Number('0011'));  // 11
console.log(Number(true));   //1

一元加操做符的操做與Number函數規則相同。

parseInt()

parseInt()會忽略字符串前面的空格,直到找到第一個非空格字符。若是第一個字符不是數字字符或負號,就會返回NaN。若是第一個字符是數字字符,就會繼續解析,直到解析完全部後續字符或者遇到了一個非數字字符。

parseInt()也能識別八進制(在ECMAScript 5中沒法識別,將開頭的0看成0)和十六進制,最後會轉換成十進制。

console.log(parseInt('123tg'));  // 123
console.log(parseInt(''));   // NaN
console.log(parseInt('070'));  // 70
console.log(parseInt('0xf'));  //15
console.log(parseInt(22.5));  // 22

咱們還能夠爲parseInt()提供第二個參數,指定須要轉換的進制。

console.log(parseInt('0xAF',16));  // 175
console.log(parseInt('AF',16));  // 175
console.log(parseInt('AF'));  // NaN
console.log(parseInt('070',8));  // 56
console.log(parseInt('70',8));  // 56

若是提供了第二個參數,要轉換八進制和十六進制時,可省略0和0x。

parseFloat()和parseInt()相似,也是從第一個字符(位置0)開始解析每一個字符,並且一直解析到字符串末尾,或者解析到遇到一個無效的浮點數字字符爲止,換句話說,字符串中的第一個小數點是有效的,後面的小數點是無效的,它還會忽略前導的零,只會解析十進制值。

console.log(parseFloat('123tg'));  // 123
console.log(parseFloat('22.12.4'));   // 22.12
console.log(parseFloat('070'));  // 70
console.log(parseFloat('0xf'));  //0
console.log(parseFloat(22.5));  // 22.5

2.4.6 String類型

String類型用於表示由零或多個16位Unicode字符組成的字符序列,即字符串。字符串能夠由雙引號或單引號表示。

var name = 'tg';

用雙引號表示的字符串和用單引號表示的字符串徹底相同,但要確保引號先後一致,也就是說以雙引號開頭的必須以雙引號結尾,以單引號開頭的必須以單引號結尾。

1.字符字面量

String數據類型包含了一些特殊的字符字面量,也叫轉義序列。

\n  換號
\t   製表
\b  空格
\r  回車
\f  進紙
\\  斜槓
\'  單引號
\"  雙引號
\xnn  以十六進制代碼nn表示的一個字符(n爲0~F),好比:\x41表示"A"
\unnn  以十六進制代碼nnnn表示的一個Unicode字符(n爲0~F)。好比:\u03a3表示Σ

這些字符字面量能夠出如今字符串中的任意位置,會被當作一個字符來解析。

var name = 'tg\u03a3';
console.log(name);  //tgΣ
console.log(name.length);  // 3

任何字符串的長度均可以訪問其length屬性取得。

2.字符串的特色

ECMAScript中的字符串是不可變的。一旦建立,值就不會改變。

後臺邏輯:要改變某個變量保存的字符串,首先要銷燬原來的字符串,而後用另外一個包含新值的字符串填充該變量。

3.轉換爲字符串

要將一個值轉換爲字符串有兩種方式:

使用每一個值(null和undefined除外)都有的toString()方法

var age = 1;
console.log(age.toString());  // "1"

咱們還能夠給toString()傳入一個參數,輸出數值的基數。

var num = 10;
console.log(num.toString());  // "10"
console.log(num.toString(2)); // 1010
console.log(num.toString(8));  // 12

可使用轉型函數String(),能將任何類型的值轉換爲字符串,轉換規則:

若是值有toString()方法,則調用該方法並返回相應的結果
若是值是null,則返回null
若是值是undefined,則返回undefined

console.log(String(10));  // "10"
console.log(String(true));  // "true"
console.log(String(null));  // "null"
console.log(String(undefined));  // "undefined"

要把某個值轉爲字符串,還可使用加號操做符:

console.log( true + '');  // "true"

2.4.7 Object類型

ECMAScript中的對象其實就是一組數據和功能的集合。

對象可經過執行new操做符後跟建立的對象類型的名稱來建立。

var o = new Object();

若是不傳參,能夠省略後面的圓括號(不推薦)。

var o = new Object;

在ECMAScript中,Object類型是全部對象的基礎。

Object的每一個實例都具備下列屬性和方法:

  • Constructor:保存着用於建立當前對象的函數,好比上面的例子,構造函數就是Object()

  • hasOwnProperty(propertyName):用於檢查給定的屬性在當前對象實例中是否存在(而不是在實例的原型中),參數必須是字符串形式

  • isPrototypeOf(object):用於檢查傳入的對象是不是另外一個對象的原型

  • propertyIsEnumerable(propertyName):用於檢查給定的屬性是否可以使用for-in語句來枚舉,參數必須是字符串形式

  • toLocaleString():返回對象的字符串表示,該字符串與執行環境的地區對應

  • toString():返回對象的字符串表

  • valueOf():返回對象的字符串、數值或布爾值表示,一般和toString()返回的值相同

相關文章
相關標籤/搜索