更新時(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ù)類型分為兩大類,分別是基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型(或稱為引用數(shù)據(jù)類型),如下圖所示。
在圖中,復(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全部都要寫成小寫字母。
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
如果一個(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)
在開發(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類型。
猜你喜歡: