首頁技術(shù)文章正文

JavaScript數(shù)據(jù)類型:javascript數(shù)據(jù)類型有哪些?

更新時(shí)間:2021-05-06 來源:黑馬程序員 瀏覽量:

JavaScript是一種弱類型語言,不用提前聲明變量的數(shù)據(jù)類型。在程序運(yùn)行過程中,變量的數(shù)據(jù)類型會(huì)被自動(dòng)確定。與之相對(duì)的是強(qiáng)類型語言,如C、Java。 下面我們通過代碼比較弱類型語言與強(qiáng)類型語言的區(qū)別,如下所示。

//強(qiáng)類型語言(Java)
int num = 10; //這里的變量num是int型(整數(shù)類型)
//弱類型語言(JavaScript)
var num = 10; //這里的變量num一開始是一個(gè)數(shù)字型
num = 'abc';  //賦值一個(gè)字符串,現(xiàn)在num變成了字符串型

從上述代碼可以看出,JavaSeript變量的數(shù)據(jù)類型,是在程序運(yùn)行時(shí)根據(jù)等號(hào)右邊的值來確定的。


JavaScript數(shù)據(jù)類型分類

JavaScript中的數(shù)據(jù)類型分為兩大類,分別是基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型(或稱為引用數(shù)據(jù)類型),如下圖所示。

 

JavaScript數(shù)據(jù)類型.png

 

在圖中,復(fù)雜數(shù)據(jù)類型的使用比較難,具體會(huì)在后面的章節(jié)中專門進(jìn)行講解,下面我們用代碼演示基本數(shù)據(jù)類型的使用。

 

(1)數(shù)字型(Number),包含整型值和浮點(diǎn)型值:

var numl = 21;         //整型值
var num2 = 0.21;   //浮點(diǎn)型值

 

(2)布爾型(Boolean),包含true和false兩個(gè)布爾值:

var bool1 = true;      //表示真、1、成立
var bool2 = false;     //表示假、0、不成立

 

(3)字符串型(String),用單引號(hào)或雙引號(hào)包裹:

var strl = '';       //空字符串
var str2 = 'abc';      //單引號(hào)包裹的字符串a(chǎn)bc
var str3 = "abc";      //雙引號(hào)包裹的字符串a(chǎn)bc


(4)未定義型(Undefined), 只有一個(gè)值undefined :

var a;              //聲明變量a,未賦值,此時(shí)a就是undefined
var b = undefined;     //變量b的值為undefined


(5)定型(Null),只有一個(gè)值null :

var a = null;        //變量a的值為null

需要注意的是,代碼中的值true、false、undefined和null全部都要寫成小寫字母。

 

一、數(shù)字型

JavaScript中的數(shù)字型可以用來保存整數(shù)或浮點(diǎn)數(shù)(小數(shù)),示例代碼如下。

 

var age = 18;      //整數(shù)
var pi = 3.14;     //浮點(diǎn)數(shù)(小數(shù))

 

下面我們針對(duì)數(shù)字型在使用時(shí)的一些細(xì)節(jié)問題進(jìn)行介紹:

 

1.進(jìn)制

常見的進(jìn)制有二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制。在一般情況下,數(shù)字都是使用十進(jìn)制來表示的。在JavaScript中還可以用八進(jìn)制和十六進(jìn)制,具體如下。

(1)在數(shù)字開頭加上0,表示八進(jìn)制數(shù)。八進(jìn)制數(shù)由0~7組成,逢8進(jìn)位:

 

var num1 = 07;
console.log(num1);       //輸出結(jié)果:7
 
var num2 = 010;
console.log(num2);    //輸出結(jié)果:8

 

(2)在數(shù)字開頭加上0x,表示十六進(jìn)制數(shù)。十六進(jìn)制數(shù)由0~9,a~f組成:

var numl = 0x9;
console.log((numl);     //輸出結(jié)果:9
var num2 = Oxa;
console.log(num2);       //輸出結(jié)果: 10

十六進(jìn)制數(shù)中的“x” 和“a~f"不區(qū)分大小寫。

 

 2.范圍

數(shù)字型的最大值和最小值可以用如下代碼來獲取。

console.log(Number.MAX_VALUE);       //輸出結(jié)果: 1.7976931348623157e+308
console.log(Number.MIN_VALUE);       //輸出結(jié)果: 5e-324

在輸出結(jié)果中,使用了科學(xué)計(jì)數(shù)法來表示,在JavaScript中可以使用科學(xué)計(jì)數(shù)法來表示數(shù)字。

 

3.特殊值

數(shù)字型有3個(gè)特殊值,分別是Infinity(無窮大)、-Infinity(無窮小)和NaN(Not a Number,非數(shù)值)。下面我們通過代碼演示這3種值出現(xiàn)的情況。

console.log(Number.MAX_VALUE*2);        //輸出結(jié)果: Infinity
console.log(-Number.MAX_VALUE*2);        //輸出結(jié)果: -Infinity
console.log('abc' - 100);            //輸出結(jié)果: NaN

若要判斷一個(gè)變量是否為非數(shù)字的類型,可以用isNaN()來進(jìn)行判斷,它會(huì)返回一個(gè)布爾值,返回true表示非數(shù)字,返回false表示是數(shù)字,示例代碼如下。

console.log (isNaN(12));     // 輸出結(jié)果: false
console.log(isNaN('abc'));    //輸出結(jié)果: true

 

二、字符串型

字符串是指計(jì)算機(jī)中用于表示文本的一系列字符, 在JavaSeript中使用單引號(hào)或雙引號(hào)來包裹字符串,示例代碼如下。

var str1 = '單引號(hào)字符串';
var str2 = "雙引號(hào)字符串";

 

下面我們針對(duì)字符串型在使用時(shí)的一些細(xì)節(jié) 問題進(jìn)行講解。

1.單、雙引號(hào)嵌套

在單引號(hào)字符串中可以直接書寫雙引號(hào),在雙引號(hào)字符串中也可以直接書寫單引號(hào),示例代碼如下。

 

//正確的語法
var str1 = 'I am a "programmer"';    // I am a "programmer"
var str2 = "I'm a 'programmer'"; // I'm a 'programmer'
 
//常見的錯(cuò)誤語法
var str1 = 'I'm a programmer';   //單引號(hào)錯(cuò)誤用法
var str2 = "I'm a "programmer""; //雙引號(hào)錯(cuò)誤用法
var str3 = '工am a programmer"; //單雙引號(hào)混用

 

2.轉(zhuǎn)義符

在字符串中使用換行、Tab等特殊符號(hào)時(shí),可以用轉(zhuǎn)義符來進(jìn)行轉(zhuǎn)義。轉(zhuǎn)義符都是以“\”

轉(zhuǎn)義符 解釋說明
\' 單引號(hào)
\n LF換行,n表示newline
\t Tab符號(hào)
\f 換頁
\b 退格,b表示blank
\xhh 由2位十六進(jìn)制數(shù)字hh表示的ISO-8859-1字符。如“\x61”表示"a"
\" 雙引號(hào)
\v 跳格(Tab、 水平)
\r CR換行
\\ 反斜線(\)
\0 Null字節(jié)
\uhhhh 由4位十六進(jìn)制數(shù)字hhhh表示的Unicode字符。如“\u597d”表示“好”


下面我們通過代碼演示轉(zhuǎn)義符的使用。

var strl = 'I\'m a programmer';   // I'm a programmer
var str2 = 'I am a\nprogrammer'    // I am a(換行)programmer
var str3 = 'C:\\JavaScript\\';   // C:\JavaScript\
var str4 = '\x61bc';        // abc
var str5 = '\u597d學(xué)生';      //好學(xué)生

 

 3.字符串長度

字符串是由若干字符組成的,這些字符的數(shù)量就是字符串的長度。通過字符串的length屬性可以獲取整個(gè)字符串的長度,示例代碼如下。

var str1 = 'I\'m a programmer';
console.log(str1.length);        //輸出結(jié)果: 16
var str2 ='我是程序員';
console.log(str2.length);        //輸出結(jié)果: 5

 

4.訪問字符串中的字符

字符串可以使用“[index]" 語法按照index(索引)訪問字符,index 從0開始,一直到字符串的長度減1,如果超過了index最大值,會(huì)返回undefined。示例代碼如下。

var str = 'I\'m a programmer';
console.log(str[0]);     //輸出結(jié)果:I
console.log(str[1]);    //輸出結(jié)果:
console.log(str[15]);    //輸出結(jié)果: r
console.log(str[16]);    //輸出結(jié)果: undefined

 

5.字符串拼接

多個(gè)字符串之間可以使用“+”進(jìn)行拼接,如果數(shù)據(jù)類型不同,拼接前會(huì)把其他類型轉(zhuǎn)成字符串,再拼接成一個(gè) 新的字符串。 示例代碼如下。

console.log('a' + 'b');   //ab
console.log('a'+ 18);    // a18
console.log(' ' + true);   // true
console.log('12' + 14);   // 1214
console.log(12 + 14);    //兩個(gè)數(shù)字相加,結(jié)果為26(非字符串排接

 

在實(shí)際開發(fā)中,經(jīng)常會(huì)將字符串和變量進(jìn)行拼接,這是因?yàn)槭褂米兞靠梢院芊奖愕匦薷睦锩娴闹?。示例代碼如下:

var age = 18;
console.log('小明’+ age +歲');     //小明18歲

 

6.“顯示年齡” 案例

在學(xué)習(xí)了字符串的使用后,下面我們通過一個(gè)顯示年齡的案例來練習(xí)。本案例需要彈出一個(gè)輸人框,讓用戶輸人年齡。輸人后,單擊“確定”按鈕,程序就會(huì)彈出來一個(gè)警告框,顯示內(nèi)容為“您今年x歲了”,x表示剛才輸人的年齡。具體代碼如下。

 

//彈出一個(gè)輸人框,讓用戶輸人年齡
var age = prompt('請(qǐng)輸人您的年齡');
//將年齡與輸出的字符串拼接
var msg='您今年'+age+'歲了';
//彈出警告框,輸出程序的處理結(jié)果
alert(msg);

 

三、布爾型

布爾型有兩個(gè)值: true和false,表示事物的“真”和“假”,通常用于邏輯判斷。示例代碼如下。

console.log(true);    //輸出結(jié)果: true
console.log(false);   //輸出結(jié)果: false

 

當(dāng)布爾型和數(shù)字型相加的時(shí)候,true 會(huì)轉(zhuǎn)換為1, false 會(huì)轉(zhuǎn)換為0,如下所示。

console.log(true + 1);    //輸出結(jié)果:2
console.log(false + 1);   //輸出結(jié)果: 1

 

四、undefined 和null

如果一個(gè)變量聲明后沒有賦值,則變量的值就是undefined。我們也可以給一個(gè)變量賦一個(gè)null值,null一般用來表示空對(duì)象指針。

下面我們通過代碼演示undefined和null的使用。

 

var a;
console.log(a);       //輸出結(jié)果: undefined
console.log(a + ' ');     //輸出結(jié)果: undefined ( 字符串型)
console.log(a + 1);     //輸出結(jié)果: NaN
var b = null;
console.log(b + '_');     //輸出結(jié)果:null(字符串型)
console.log(b + 1);     //輸出結(jié)果: 1(b轉(zhuǎn)換為0)
console.log(b + true);     //輸出結(jié)果: 1(b轉(zhuǎn)換為0,true轉(zhuǎn)換為1)

 

數(shù)據(jù)類型檢測(cè)

在開發(fā)中,當(dāng)不確定一個(gè)變量或值是什么數(shù)據(jù)類型的時(shí)候,可以利用typeof運(yùn)算符進(jìn)行數(shù)據(jù)類型檢測(cè)。示例代碼如下。

console.log(typeof 12);       //輸出結(jié)果: number
console.log (typeof '12');     //輸出結(jié)果: string
console.log (typeof true);     //輸出結(jié)果: boolean
console.log (typeof undefined);    //輸出結(jié)果: undefined
console.log (typeof null);       //輸出結(jié)果: object

在上述示例中,typeof 檢測(cè)nmull 值時(shí)返回的是object,而不是null,這是JavaScript最初實(shí)現(xiàn)時(shí)的歷史遺留問題,后來被ECMAScript沿用下來。

使用typeof可以很方便地檢測(cè)變量的數(shù)據(jù)類型,示例代碼如下。

var age = prompt('請(qǐng)輸入您的年齡');
console.log (age)
console.log (typeof age) ;

上述代碼執(zhí)行后,如果用戶什么都不輸人,單擊“確定”按鈕,則age的值為空字符串,類型為string;如果單擊“取消”按鈕,則age的值為null,類型為object;如果輸入的是一個(gè)數(shù)字,則age的值是用字符串保存的數(shù)字,類型為string。

typeof運(yùn)算符的返回結(jié)果是-一個(gè)字符串,可以使用比較運(yùn)算符“==” 來判斷typeof返回的檢測(cè)結(jié)果是否符合預(yù)期,示例代碼如下。

var a = '12';
console.log (typeof a == 'string');       //輸出結(jié)果: true
console.log (typeof a == 'number');    //輸出結(jié)果: false

 

在上述代碼中,“typeof a”的返回結(jié)果是string,在與字符串string比較時(shí),結(jié)果為true,表示a是string類型;與number比較時(shí),結(jié)果為false, 表示a不是number類型。



猜你喜歡:

什么是變量?JavaScript變量命名規(guī)范介紹

Javascript多維數(shù)組介紹

Javascript中的預(yù)解析是怎么實(shí)現(xiàn)的?

JavaScript中如何搜索數(shù)組元素?

黑馬程序員HTML&JS+前端培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!