JavaScript中的基本數據類型


閱讀目錄

  1. 1.1前言
  2. 2.1 javascript中的變量
  3. 3.1 簡單數據類型

   3.1.1.  typeof 操作符

   3.1.2.  Undefined 類型

   3.1.3.  Null 類型

   3.1.4.  Boolean 類型

   3.1.5.  Number 類型

   3.1.6.  String類型

   3.1.7.  Object 類型

   4.結束語

   5.參考文檔

 

前言

      大家經常可以見到javascript中的一些數據類型,比如“undefined”、“boolean”、“string”等等,但是ECMAScipt中的變量又是松散類型的,所謂松散類型就是可以用來保存任何類型的數據。所以javascript中用var關鍵字來定義變量,所以無法確定變量一定會存儲什么值,也就不知道變量到底會是什么類型,因為可以隨時改變變量的類型。今天這篇文章就和大家一起來學習javascript中的類型,這個問題雖然簡單,但是還是有很多童鞋在很多時候沒辦法真正掌握它,其中不正確的地方請大家指出來,共同學習,共同進步。 

javascript中的變量

      javascript中的變量只是一個占位符,前言已經說過了,因為松散類型的緣故。  定義變量:

var name;

上述代碼定義了一個名為name的變量,該變量可以用來保存任何值(像這樣未經過初始化的變量,會保存一個特殊的值--undefined),也可以初始化變量的值,

var name =”jwy”; //javascript中的單引號和雙引號沒有區別,不過要注意正確嵌套
name=10;

一開始name初始化成了字符串值“jwy”,后又改成了數字值—100,這種做法是不建議的,但是在ECMAScript是有效果的,而且在很多時候會這樣做。

也可以一條語句定義多個變量,而且很多javascript框架是這么做的

var name=”jwy”,author,age=29;

每條語句加分號是很好的編程習慣。不過一條多個變量時,建議換行和縮進,這樣可以提高可讀性。

簡單數據類型

      ECMAScript中有5種簡單數據類型:Undefined,Null,Boolea,Number和String。還有一種復雜數據類型—Object

typeof操作符

      由於Javascript中的變量是松散類型的,所以它提供了一種檢測當前變量的數據類型的方法,也就是typeof關鍵字,在上面提到的ECMAScript中的5種簡單數據類型中,(記住,這5種只是數據類型,代表一種數據類型,就想C#中的int,string類型一樣),通過typeof關鍵字,對這5種數據類型會返回下面的值(以字符串形式顯示

“undefined”    ----------   如果值未定義                       Undefined

“boolean”      ----------     如果這個值是布爾值              Boolean

“string”        ----------     如果這個值是字符串              String

“number”      ----------     如果這個值是數值類型           Number

“object”        ----------     如果這個值是對象或null        Object

“function”       ----------     如果這個值是函數                 Function

不過嚴格來說,函數在ECMAScript中是對象,每個函數都是Function這個類的一個實例,既然函數是一個對象,那么它也就是一個引用類型了,所以一個函數只是一個變量名而已,因此,在很多場合常常可以看到,將函數名作為參數,傳進函數中,然后進行調用,這就類似於C#中的委托,在后面會詳細的講解函數這個東西,畢竟Javascript中很多東西都依賴於函數來實現。

Undefined 類型

      上面說了,5種類型是數據類型,所以數據類型是有值的,Undefined的值就是undefined,注意,是u是小寫的。如果聲明變量卻沒有初始化,則當前變量的值就是undefined。不過,一般建議盡量給變量初始化,但是在早期的Javascript版本中是沒有規定undefined這個值的,所以在有些框架中為了兼容舊版瀏覽器,會給window對象添加undefined值,如下:

window['undefined'] = window['undefined'];  
//或者
window.undefined = window.undefined;

簡單的說就是給window對象的undefined屬性賦上undefined,在較老的瀏覽器對象並沒有undefined這個屬性,所以如果使用到undefined的操作將會導致失常,故采用這樣的方式,不過一開始看會有點難理解,在舊版本的瀏覽器中會因為沒有window.undefined這個對象而返回一個undefined值,所以這樣做可以兼容舊瀏覽器。

不過包含undefined值的變量與未定義的變量是不一樣的,如:

var name;
alert(name);//undefined
alert(age);// 錯誤:age is not defined

還沒聲明過的變量只能執行一項操作,其他全都不能做,就是使用typeof操作符檢測其數據類型。

如果不管聲明過未初始化以及未聲明過的變量執行typeof都是返回undefined的值。兩種變來那個都不能執行真正的操作

Null類型

      Null類型的值是null,它表示一個空對象指針,沒有指向任何對象,如果一個變量的值是null,那當前變量很有可能就是垃圾收集的對象,使用typeof監測null值時會返回”object”,

var person = null;
alert(typeof person);//”object”

建議:如果變量是要用來保存對象的額,則初始化為null,這樣到時就可以檢測該變量是否已經保存了一個對象的引用的,

注意:undefined值是派生自null的,所以對他們執行相等測試會返回true,如:

alert(null == undefind);//true

盡管如此,但是他們用途完全不同,無論在什么情況下都沒必要將一個變量的值顯示設為undefined,但是這個規則對null卻不適用。

Boolean類型

      這個類型只有兩個值:true 和false。雖然只有兩個值,但是javascript中所有類型的值都有與這兩個值等價的值。要將一個值轉換為對應的Boolean值,可以調用轉型函數Boolean()  (其實Boolean ,Object,String,Number,Function等這些都是一個函數,構造函數,同樣也可以理解為一個類,用類型調用toString()方法會返回這樣的東西:

"function Function() { [native code] }"  ,Function會相應的改成各自的那個調用函數   )

其實在 if 語句判斷中,會對里面的條件自動執行Boolean變化的。

Number類型

      數值類型有很多值,最基本的當然就是十進制啦,如:      

var num=510;

除了十進制,整數還可以通過八進制或十六進制,其中八進制字面值第一位必須是0,然后是八進制數字序列,如果字面值中的數值超出了范圍,那么前導零將被忽略。后面的額數值將被當做十進制數解析。

var num1=070;//八進制的56
var num2 =079;//無效的八進制—解析為79
var num3 =08;// 無效的八進制—解析為8

而十六進制前面則必須是0x,后跟十六進制數字(0~F),不分大小寫。如:

var num1 = 0xA;
var num2 = 0x1f;

雖然可以表示為八進制和十六進制,但是計算時會被轉換成十進制值。

除了整數,還有浮點數值,當然了,沒有像其他強類型語言中的float之類的關鍵字了。

var num1 = 1.1;
var num2 =0.1;
var num3 = .1;//有效,但不推薦

在保存整數時內存分配大小只有浮點數的1/2,所以當浮點數可以轉換為整數時,javascript會自動轉換為整數。

當然了,除了這些數值比較小的,還有一些極大或極小的數值,可以用科學計數法表示,

var num=123.456e10;

浮點數值的最高精度是17位小數,但是計算時其精確度遠遠不如整數。例如 ,0.1+0.2不等於0.3,而是0.3000000000000004,所以在做判斷時,千萬不要用浮點數相加判斷等於預想中的某個值。

在javascript中數值最小的是Number.MIN_VALUE,這里可以想象成Number是一個類,而MIN_VALUE 是一個靜態變量,儲存最小值,同樣,最大的是Number.MAX_VALUE。

如果計算中超出了這個最大值和最小值范圍,則將被自動轉換成Infinity值,如果是負數,就是-Infinity,整數就是Infinity,Infinity的意思是無窮,也就是正負無窮,跟數學中的概念是一樣的。但是Infinity是無法參與計算的。可以用原生函數確定是不是有窮:isFinite();只有位於數值范圍內才會返回true。

在Javascript中數值除了那些普通的整數、浮點數、最大值、最小值、無窮之外呢,還有一個特殊的值,就是NaN這個數值用於表示一個本來要返回數值的操作數未返回數值的情況。比如,在C#中任何數值除以0都會報錯,拋出異常,但是在Javascript中,任何數值除以0會返回Nan,因此不會影響代碼的執行。

NaN的特點:

1、任何設計NaN的操作(如:NaN/0)都會返回NaN.

2、NaN與任何值都不相等,包括NaN本身。如:

alert(NaN == NaN);//false

所以Javascript中有一個isNaN()函數,這個函數接收一個參數,任意類型,它會幫我們確定這個參數是否”不是數值”。它會先嘗試先講這個值轉為數值。如果不能被轉換為數值的值在調用這個函數之后會返回true,即is  NaN 非數值。

至於數值轉換,這個內容在Javascript中擴展開來又是一篇文章,有時間再整理整理。

String類型

字符串可以由單引號或雙引號表示,在Javascript中這兩種引號是等價的,如:

var name = ‘jwy’;
var author = “jwy”;

不過就是要注意正確嵌套。

字符串可以直接用字面量賦值。任何字符串的長度都可以通過訪問氣length屬性獲得。

在Javascript中的字符串是不可變的,其實這跟C#中是一樣的,(估計也是為了提高性能),字符串一旦創建,他們的值就不能改變,要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用另一個包含信紙的字符串填充該變量。

var name=”jwy”;
name = “jwy”+” study javascript”;

這里一開始name是保存字符串”jwy”的,第二行代碼則將“jwy”+” study javascript”; 值重新賦給name,它先床架一個能容納這個長度的新字符串,然后填充,銷毀原來的字符串。

幾乎每個值都有自己的toString()方法,在后面的文章會解釋這個方法哪里來的,它會返回相應值的字符串表現。

var age=11;
var ageToString =age.toString();//”11”

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

一般來說,調用toString()方法不必傳遞參數,但是,在調用數值的toString方法時,可以傳遞一個參數,用來指定要輸出的數值的基數(看是要輸出十進制、二進制、八進制、十六進制表示)

由於null和undefined沒有toString方法,在不知道是否是這兩者的情況下調用是會報錯的,所以還有一條路可以選,就是使用轉型函數String(),它呢就可以接收任何類型的值轉為字符串了,處理規則如下:

1、如果這個值有toString則直接調用,並返回結果

2、如果是null,則返回”null”

3、如果是unde,則返回”undefined”

Object 類型

Object類型是Javascript引用類型的鼻祖了,(就跟在C#和Java中是一樣的道理),在創建Object類型的實例后可以為其添加屬性和方法,

var o = new Object;//有效,不推薦
var o =new Object();

 在Javascript中,Object類型所具有的任何屬性和方法也同樣存在於更具體的對象中。每個實例都有如下的屬性和方法,如下:

1、constructor ,保存着用於創建當前對象的函數。上面構造函數就是Object();

2、hasOwnProperty,用於檢查給定的屬性是否在當前對象實例中,是就true,不是在實例中,而是在原型中,則是false;

3、isPrototypeOf,用於檢查傳入的對象是否是另一個對象的原型

4、propertyIsEnumerable,用於檢查給定的屬性是否能夠使用for…in語句來枚舉,

5、toString,返回對象的字符串表示

6、valueOf,返回對象的字符串、數值或布爾值表示,通常與toString方法返回值相同

以上就是Object所具有的屬性和方法,所有對象都會因為繼承關系而繼承這些屬性和方法。

結束語

         Undefined、Null、Boolean、Number、String是javascript中的基本數據類型,而Object屬於引用類型。用typeof檢測其他類型會返回相應的字符串,但是檢測null或對象時,會返回”object",如果掌握了這些,以后就不會看到這些會點摸不着頭腦了。順帶提一句:

Boolean、Number、String 這三個是Javascript中的基本包裝類型,也就是這三個其實是一個構造函數,他們是Function的實例,是引用類型,至於這里的String與文章說的String是同名,是因為其實上文說的String是指字符串,這里的String指的是String這個構造函數,上面那么寫,是為了更好的理解,因為Javascript是松散類型的。我們可以看下String實例化的例子:

var name = String("jwy");
alert(typeof name);//"object"
var author = "Tom";
alert(typeof name);//"string"

至於author這個會有length,substring等等這些方法,其實是String這里的方面,string只是String的一個實例,類似於C#中的String,和string,只不過這里特殊一點。

注意,typeof 變量  如果值是"string" 的話,也就是這個變量是字符串,在Javascript中,字符串是基本類型,而在C#或Java中,字符串是引用類型,但是Javascript中的String是引用類型,因為它是Javascript中定義好的基本包裝類型,在C#中,String跟string其實是一樣的。這個東西有點繞,如果有錯的,大家請指出來,一起交流交流。

如果覺得不錯的話,請點擊下推薦,(*^__^*) !!

 轉載請注明出處:http://www.cnblogs.com/enshjiang/archive/2012/03/17/2404149.html

參考文檔:javascript高級程序設計(第二版)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM