本篇文章給大家?guī)砹薐avaScript中關(guān)于六大基本數(shù)據(jù)類型的相關(guān)知識,希望對大家有幫助。
一、區(qū)分大小寫
在JavaScript中,所有的一切(變量、函數(shù)和操作符)都區(qū)分大小寫。這也就意味著,變量名test和變量名Test分別表示兩個不同的變量。
二、標識符
所謂的表示標識符,就是指變量、函數(shù)名和操作符,或者函數(shù)的參數(shù)。標志符的格式規(guī)則如下:
1、第一個字符必須是一個字符、下劃線(_)或者一個美元符號($);
2、其他的字符可以是字母、下劃線、美元符號和數(shù)字;
按照慣例,JavaScript的標識符采用小駝峰書寫格式,也就是打開一個字母小寫,剩下的單詞的首字母大寫。例如:firstChirld、myCar;
當然,標識符采用小駝峰書寫格式不是強制要求,但是可以便于我們理解代碼,在書寫時盡量用小駝峰書寫格式,便于別人理解你的代碼。
三、注釋
JavaScript中的注釋方法分為單行注釋和多行注釋:
單行注釋:
//這是一個單行注釋
多行注釋:
/* *這是一個 *多行注釋 */
四、語句
在JavaScript中,語句都是以一個分號結(jié)尾;如果省略分號,則由解釋器去確定結(jié)尾。如下例所示:
var sum = a + b //即使沒有分號也是有效語句——不推薦 var diff = a - b; //有效語句——推薦
五、變量
JavaScript中的變量類型是弱類型的,所謂弱類型就是可以用來保存任何類型的數(shù)據(jù)。換句話說,每個變量僅僅是一個用于保存值的占位符而已。
定義變量時用var關(guān)鍵字,后面跟變量名(即標識符)。如下所示:
var message;
JavaScript也支持直接初始化變量,因此在定義變量的同時就可以設置變量的值。如下所示:
var message = "Hello world!";
有一點必須注意,即用var關(guān)鍵字定義的變量將成為定義該變量的作用域中的局部變量。也就是說,如果函數(shù)中使用var定義一個變量,那么這個變量在函數(shù)運行結(jié)束后就會被銷毀。例如:
function test(){ var message = "Hello"; //局部變量 } test(); console.log(message); //錯誤!
出現(xiàn)錯誤的原因是,變量message是在函數(shù)test()中使用var定義的。當函數(shù)被調(diào)用時,就會創(chuàng)建變量并為其賦值。而在此之后,這個變量會立即銷毀,因此,例子中的下一行代碼就會導致錯誤。不過,可以像下面這樣省略關(guān)鍵字var,從而創(chuàng)建一個全局變量:
function test(){ message = "Hello"; //全局變量 } test(); console.log(message); //"Hello"
在這里省略了關(guān)鍵字var,message就變成了全局變量。這樣,只要調(diào)用一次test()函數(shù),這個變量就被定義了,全局變量被定以后,就可以在函數(shù)外部的任何地方都可以被訪問到。
雖然省略關(guān)鍵字var可以定義全局變量,但是不建議這樣做,因為在局部作用域中定義的全局變量很難維護;
數(shù)據(jù)類型
JavaScript中有幾種簡單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number和String。還要一種復雜類型——Object,Object本質(zhì)是一組無序的名值對組成。JavaScript中不支持任何創(chuàng)建自定義的類型的機制,而所有值都是這6種數(shù)據(jù)類型之一。
typeof操作符
由于JavaScript是弱類型的,因此需要有一種手段來檢測給定變量的數(shù)據(jù)類型——typeof就是一個負責檢測給定變量的數(shù)據(jù)類型的操作符。對一個值使用typeof操作符可能返回下列某個字符串:
-
“undefined”——如果這個值未定義;
-
“boolean”——如果這個值是布爾類型;
-
“string”——如果這個值是字符串;
-
“number”——如果這個值是數(shù)字;
-
“object”——如果這個值是對象或null;
-
“function”——如果這個值是函數(shù);
下面是使用typeof操作符的幾個例子:
var message = "hello"; console.log(typeof message); //"string" console.log(typeof(message)); //"string" console.log(typeof 95); //"number"
typeof操作符的操作數(shù)可以是變量,也可以是數(shù)值字面量。注意,typeof不是函數(shù),因此此例中的圓括號盡管可以使用,但是不是必需的。
在JavaScript中,函數(shù)是一種對象,不是一種數(shù)據(jù)類型,因此使用typeof來區(qū)分函數(shù)和其他對象是必要的。
Undefined類型
undefined類型只有一個值,即特殊的undefined。在使用var聲明變量但對其未加以初始化時,這個變量的值就是undefined。例如:
var message; console.log(message == undefined); //true var message1 = "undefined"; console.log(message1 == undefined); //true
然而,令人困惑的一點是:對未初始化的變量執(zhí)行typeof操作符會返回undefined值,而對未聲明的比變量執(zhí)行typeof操作符同樣也會返回undefined值。來看下面的例子:
var message; //這個變量聲明之后默認取得了undefined值 //下面這個變量并沒有聲明 //var age; console.log(typeof message); //"undefined" console.log(typeof age); //"undefined"
為初始化的變量和為聲明的變量都返回了undefined,這個結(jié)果有其邏輯上的合理性。因為這兩種變量從技術(shù)角度上有本質(zhì)的區(qū)別,但實際上無論對那種變量也不可能執(zhí)行真正的操作,
Null類型
Null類型是第二個只有一個值得類型,這個特殊的值是null。從邏輯的角度來看,null值表示一個對象的空指針,而這也正是使用typeof操作符的檢測null值時會返回“object”的原因,如下面的例子所示:
var message= null; console.log(message); //"object"
如果定義的對象將來用來保存對象,那么最好將這個變量初始化為null而不是其他的值。這樣一來,只要直接檢查null值就可以直接知道相應的變量是否已經(jīng)保存了一個對象的引用,如下面的例子:
if(message != null){ //對message進行一系列的操作 }
實際上,undefined的值是派生自null值得,所以對它們進行相等性測試的時候要返回true:
console.log(null == undefined); //true
在這里,位于null和undefined之間的相等操作符(==)總是返回true。盡管null和undefined有這樣的關(guān)系,但它們的的用途完全不同。如上面所述,無論在什么情況下,都沒有必要把一個變量顯示的表示為undefined,可是同樣的規(guī)則對null卻不適用。換句話說,只有保存對象的變量還沒有真正的保存對象,就應該在明確地表示將該變量保存為null值。這樣做不僅可以體現(xiàn)null值作為空指針的慣例,而且也有助于進一步的區(qū)分null和undefined。
Boolean類型
Boolean類型是JavaScript中使用最多的一種類型,該類型只有兩個字面值:true和false。這兩個值與數(shù)字值不是一回事,因此true不一定等于1,而false也不一定等于0。以下是為變量賦值的例子:
var first = true; var second = false;
需要注意的是,boolean類型的兩個值區(qū)分大小寫。也就是說True和true、False和false不是一回事。
True和False(以及其他混合大小形式)只是標識符,不是boolean值。
雖然boolean值只有兩個值,但是JavaScript所有類型的值都有與這兩個boolean值等價的值。要將一個值轉(zhuǎn)換為相應的Boolean值,可以調(diào)用Boolean()函數(shù)。例如:
var message = "Hello world!"; var messageAsBoolean = Boolean(message); console.log(messageAsBoolean); //true
可以對任何類型的值調(diào)用Boolean()函數(shù),而且總會返回一個boolean值。至于返回的是true還是false取決于要轉(zhuǎn)換的實際類型及其實際值。下表給出了各種數(shù)據(jù)類型對其轉(zhuǎn)換的相應規(guī)則:
數(shù)據(jù)類型 | 轉(zhuǎn)換為true的值 | 轉(zhuǎn)換為false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零數(shù)字值(包括無窮大) | 0和NaN |
Object | 任何對象 | null |
Undefined | n/a | undefined |
Number類型
在JavaScript中number類型定義了不同的數(shù)值字面量格式。例如:
var intNumber = 55; //十進制整數(shù) var octalNum1 = 070; //八進制的56 var octaNum2 = 079; //無效的八進制數(shù),解析為79 var octaNum3 = 08; //無效的八進制數(shù),解析為8 var hexNum1 = 0xA; //十六進制的10 var hexNum2 = 0x1f; //十六進制的31
在進行算術(shù)計算時,所有八進制和十六進制表示的數(shù)值都會轉(zhuǎn)換成十進制數(shù)值。
NaN
NaN即非數(shù)值,是一個特殊的數(shù)值。這個數(shù)用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況(這樣就不會拋出錯誤了)。NaN本身有兩個特點:
首先,任何涉及NaN的操作(例如NaN/10)都會返回NaN,這個特點在多步計算中有可能導致問題。
其次,NaN與任何值都不相等,包括NaN本身。例如:
console.log(NaN ==NaN ); //false
String類型
string類型用于表示零或多個Unicode字符組成的字符序列,即字符串。字符串可以由雙引號(")或單引號(’)表示,因此下面兩種寫法都是有效的:
var firstName = "王文正"; var secondName = "王彬";
雙引號開頭的必須以雙引號結(jié)尾,而當引號開頭的必須以單引號結(jié)尾。下面這種會導致語法錯誤:
var name = "王彬'; //語法錯誤
字符字面量
String類型中包含了一些特殊字面量,也叫轉(zhuǎn)義序列,用于表示非打印字符,或者有其他的用途的字符。這些字符字面量如下表所示:
字面量 | 含義 |
---|---|
n | 換行 |
t | 制表 |
b | 退格 |
r | 回車 |
f | 進紙 |
斜杠 | |
’ | 單引號 |
" | 雙引號 |
xnn | 以十六進制代碼nn表示一個字符 |
unnn | 以十六進制代碼nnn表示一個Unicode字符 |
字符串的特點
JavaScript中的字符串是不可變的,也就是說,字符串一旦創(chuàng)建,它的值就是不可更改的。要更改某個變量中保存的字符串,首先要銷毀原來的字符串,然后用另一個包含新值得字符串填充變量,例如:
var lang = "java"; lang = lang + "script"; console.log(lang); //javascript
Object類型
JavaScript中的對象是一組數(shù)據(jù)和功能的集合。對象可以通過執(zhí)行new操作符后跟要創(chuàng)建的對象類型名稱來創(chuàng)建。而創(chuàng)建Object類型的實例并為其添加屬性或方法,就可以創(chuàng)建自定義對象。如下所示:
var o = new Object(); var o = new Object; //有效,但是不推薦這種做法;
Object的每個實例都具有以下下列屬性和方法:
-
constructor:保存著用于創(chuàng)建當期那對象的函數(shù)。
-
hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中(而不是實際的原型中)是否存在。
-
isPrototypeOf(object):用于檢查傳入的對象那個是否是當前對象的原型。
-
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語句
-
toLocaleString():返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應
-
valueOf():返回對象的字符串、數(shù)值或布爾值表示。通常與toString()方法的返回值相同
-
toString():返回對象的字符串表示
-
由于在JavaScript中Object是所有對象的基礎,因此所有對象都具有這些基本的屬性和方法。
【