Javascript的5種基本數據類型總結

ECMAScript中有5種基本數據類型,分別是:Undefined,Null,Boolean,Number和String,還有一種複雜數據類型Object,Object本質上是由一組無序的名值對組成的。(這裏就不細細講述了)

typeof操作符
typeof操作符是負責檢測給定變量的數據類型,下面是幾個使用typeof操作符的例子
在這裏插入圖片描述
這說明typeof操作符可以是變量,可以是數值字面量。注意,typeof是一個操作符而不是一個函數,因此例子中的圓括號儘管可以使用,但不是必須的。
調用typeof null會返回Object,因爲特殊值null被認爲是一個空的對象引用。

1、Undefined類型

Undefined類型 只有一個值,即特殊的undefined。在使用var 聲明但未對其加以初始化時,這個變量的值就是undefined(默認獲得的)。var message; 只是指針指向了undefined 。

var message;
alert(message==undefined);  //true

但是,包含undefined值的變量與尚未定義的變量還是不一樣的。(尚未定義的變量是空指針,沒有在內存中分配任何空間所以報錯)

var message; //這個變量聲明之後默認取得了undefined值
//var age;  //該變量未聲明
 alert(message);  //undefined
 alert(age);  //報錯

2、Null類型
Null類型是第二個只有一個值的數據類型,這個值就是null 。從邏輯角度看,null值便是一個空對象指針,所以在用typeof操作符檢測時會返回object

var book=null;
alert(typeof book);  //object

注意,如果定義的變量準備在將來用於保存對象,那麼最好將該變量初始化爲null而不是其他值。這樣的話,只要直接檢查null值就可以知道相應的變量是否已經保存了一個對象的引用。

3、Boolean類型
Boolean類型只有兩個字面值:true和false,這兩個值是區分大小寫的,也就是說,True和False都不是Boolean值,只是標識符。
在ECMAScript中要將一個值轉換爲一個Boolean值,可以使用轉型函數Boolean()
在這裏插入圖片描述

4、Number類型
最基本的數值字面量格式是十進制整數,十進制整數可以向下面那樣直接在代碼中輸入

var intNum=55;

除了十進制表示外,還可以通過八進制和十六進制來表示。其中,八進制字面值得第一位必須是0,然後是八進制數字序列(0~7)。如果後接的字面值超出範圍,則前面的導零失效,後面的值將被當做十進制數值解析。

var a=065;  //八進制的53
var b=085;   //85
var c=08;  //8
alert(a);
alert(b);
alert(c);

八進制字面量在嚴格模式下是無效的,會導致支持該模式的JavaScript引擎拋出錯誤。
十六進制字面值的前兩位必須是0x,後跟任何十六進制數字(0-9及A-F)。字母可以大小寫。

var a=0xA;
var b=0x1f;
console.log(a);//十六進制的10
console.log(b);//十六進制31

在進行算術計算時,所有以八進制和十六進制表示的數值最終會被轉換成十進制數值。

浮點數值
浮點數值就是指該數值中必須包含一個小數點,並且小數點後面必須至少有一位數字。雖然小數點前面可以沒有整數但不推薦。

var floatNum1=1.2;
var floatNum2=0.2;
var floatNum3=.2;
console.log(floatNum1);//1.2
console.log(floatNum2);//0.2
console.log(floatNum3);//0.2 雖然小數點前面可以沒有整數但不推薦

由於保存浮點數值需要的內存空間是保存整數數值的兩倍,所以ES會將浮點數值轉換爲整數值。如果小數點後面沒有跟任何數字,會解析成整數保存。如果浮點數值本身表示的就是一個整數,那麼該數值就會被轉換爲整數。

var floatNum4=1.;
var floatNum5=10.0;
console.log(floatNum4);//小數點後沒有數字解析爲整數1
console.log(floatNum5);//10

可以用e表示法(科學計數法)表示浮點數值。e表示法指表示的數值等於e前面的數值乘以10的指數次冪。前面的數可以是整數也可以是浮點數,中間是一個大寫或小寫的字母e,後面是10的指數冪。

var floatNum6=3.1456e7;
console.log(floatNum6);//31456000

NaN
NaN,即非數值(Not a Number)是一個特殊的值。在ES中,任何數值除以非數值會返回NaN。
首先,任何涉及NaN的操作(NaN/10)都會返回NaN。其次,NaN與任何值都不相等,包括NaN本身。

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

針對NaN的特點,ES定義了isNaN()函數。這個函數接收一個參數,該參數可以是任何類型,函數會確定這個參數是否“不是數值”。isNaN()在接收到一個值之後,會嘗試將這個值轉換爲數值。某些不是數值的值會直接轉換爲數值(如字符串“10”或者Boolean值)。 任何不能被轉換爲數值的值都會導致這個函數返回true.

console.log(isNaN(NaN)); //true
console.log(isNaN(10));//false
console.log(isNaN("10"));//false
console.log(isNaN(""));//false
console.log(isNaN("febby"));//true
console.log(isNaN(true));//false

數值轉換
有3個函數可以把非數值轉換爲數值:Number()、parseInt()、parseFloat()。第一個函數Number()可以用於任何數據類型,而另外兩個函數則專門用於把字符串轉換爲數值。

console.log(Number("Hello Febby")); //NaN
console.log(Number("")); //0
console.log(Number("000032"));//32 前導的零被忽略
console.log(Number(true));//1

parseInt()函數會忽略字符串前面的空格,直至找到第一個非空格字符。用parseInt()轉換空字符串會返回NaN(Number()對空字符返回0)。

 console.log(parseInt("1234Febby"));//1234
 console.log(parseInt(""));//NaN
 console.log(parseInt("0xf"));//15 (十六進制)
 console.log(parseInt(32.6));//32  小數點不是有效的數字字符
 console.log(parseInt("075"));//75 (ES5認爲是十進制)
 console.log(parseInt("70"));//70
 console.log(parseInt("0xa"));//10 (十六進制)

可以爲這個函數提供第二個參數:轉換時使用的基數(即多少進制)

console.log(parseInt("0xf",16));//15
console.log(parseInt("AF",16)); //175  如果指定了16作爲第二個參數,字符串可以不帶前面的"0x"
console.log(parseInt("AF"));//NaN

第二個參數表示按幾進制進行解析成十進制的數

//第二個參數表示按幾進制進行解析成十進制的數
console.log(parseInt("10",2));//2
console.log(parseInt("10",8));//8
console.log(parseInt("10",10));//10
console.log(parseInt("10",16));//16

parseFloat()與parseInt()類似,從第一個字符(位置0)開始解析每個字符,但是隻解析十進制值,沒有用第二個參數指定基數的用法

//parseFloat()只解析十進制值,沒有用第二個參數指定基數的用法
console.log(parseFloat("1234Febby"));//1234     
console.log(parseFloat("0xa")); //0  十六進制格式的字符串會被轉換爲0
console.log(parseFloat("071")); //71
console.log(parseFloat("22.5"));  //22.5     
console.log(parseFloat("22.34.56")); //22.34
console.log(parseFloat("0958.2")); //958.2
console.log(parseFloat("3.145e7")); //31450000

5、String類型
String類型用於表示由零或多個16位Unicode字符(2個字節)組成的字符序列,即字符串。字符串可以有雙引號或單引號表示。

console.log("Febby");
console.log('Febby');
console.log('Febby"); //報錯

字符字面量(轉義序列)

字面量 含義
\n 換行(next line)
\t 製表(table)
\b 退格(backspace)
\r 回車(return)
\f 進紙(feed paper)
\ \ 斜槓
\ ’ 單引號(’)
\ " 雙引號(”)
\xnn 以十六進制代碼nn表示的一個字符(其中n爲0~F)。例如,\x41表示"A"
\unnn 以十六進制代碼nnnn表示的一個字符(其中n爲0~F)。例如,\u03a3表示"Σ"
var text="Hello Febby! \u03a3";
console.log(text); //Hello Febby! Σ
console.log(text.length);//14

字符串特點
ES中的字符串是不可變的。要改變某個變量保存的字符串,首先要銷燬原來的字符串,然後再用另一個包含新值的字符串填充該變量,這個過程是在後臺發生的。

 var lang="Hello";
 lang=lang+"Febby";
 console.log(lang);//HelloFebby

轉換爲字符串
要把一個值轉換爲字符串有兩種方式。
第一種是 toString()方法。這個方法是返回相應的值的字符串表現。

 //轉換爲字符串
 var age=18;
 console.log(age.toString()); //字符串"18"

數值、布爾值、對象和字符串值都有toString()方法,但null和undefined值沒有這個方法。

可以傳遞一個參數:輸出數值的基數,可以輸出以二進制、八進制、十六進制,或者其他進制格式表示的字符串值

 //可以傳遞一個參數:輸出數值的基數,可以輸出以二進制、八進制、十六進制,或者其他進制格式表示的字符串值
 var num=10;
 console.log(num.toString());//"10"
 console.log(num.toString(2));//"1010"
 console.log(num.toString(8));//"12"
 console.log(num.toString(10));//"10" 
 console.log(num.toString(16));//"a"

第二種是 String()方法。這個函數能夠將任何類型的值轉爲爲字符串。因爲null和undefined值沒有toString()方法,所以String()函數就返回了這兩個值的字面量。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章