JavaScript之數據類型

javasscript有5種簡單數據類型(也成爲基本數據類型):

Undefined、Null、Boolean、Number、String

1種複雜數據類型:

Object

在javascript中所有值的數據類型就是上述6種之一了。那麼我們需要一個方法來檢測給定變量到底是那種數據類型,typeof操作符就可以幫助我們解決問題。

var msg="博客園";
alert(typeof msg);  // "string"
alert(typeof 110);  //  "number"

 

使用typeof 操作符,返回下列某個字符串:

"undefined" --該值未定義

"boolean"--布爾值

"string"--字符串

"number"--數值

"object"--對象或null

"function"--函數

看到這裏我們對"object"--對象或null有些疑惑,爲什麼 typeof null 會返回object,這裏我們需要記住的是null是一個特殊類型,他表示對一個空對象的引用,所以會返回object。

華麗的分割線 ----------------------------------------------------------------------------------------------------------------------------------------------------------------

1.Undefined類型

當我們聲明一個變量時沒有對其進行初始化,這個變量的值就是undefined:

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

例子中聲明變量msg,並沒有對其進行初始化,所以會彈出undefined。

所以聲明變量時我們也可以使用undefined來初始化變量:var msg=undefined,

但是未經初始化的值會默認取得undefined,這種寫法也沒必要了。

var msg; // 聲明變量,默認取得undefined
// 變量name沒有聲明
// var name 

alert(msg); // "undefined"
alert(name); // 產生錯誤

上述代碼name變量並沒有被聲明,傳遞給alert函數時產生一個錯誤。

這時我們用typeof檢測一下我們的變量:

var msg; // 聲明變量,默認取得undefined
// 變量name沒有聲明
// var name 

alert(typeof msg); // "undefined"
alert(typeof name); // "undefined"

結果是未初始化和未聲明的變量執行typeof都返回了undefined,這個結果有其邏輯上的合理性。因爲雖然這兩種變量從技術上角度看有本質區別。

即便未初始化的變量會自動賦予undefined值,但養成顯式初始化變量(即在聲明變量的同時給變量賦值)的習慣。如果能夠做到這一點,那麼當typeof操作符返回undefined

時,我們就知道被檢測的變量是有還是沒有被聲明的,而不是尚未初始化的了。

2.Null類型

前面說過null是一個特殊的類型,表示對一個空對象的引用。

但是undefined和null之間有什麼關係呢?看下面的代碼:

alert(null==undefined); // true

實際上,undefined值派生自null值,因此ECMA-262規定它們的相等測試要返回teue。

儘管有這樣的關係,但他們的用途完全不同。前面也說過聲明變量沒有必要顯示的初始化爲undefined,會默認取得。對於null卻不能這樣了,也就是說聲明一個變量來保存對象,只要

變量還沒有保存,就應該讓變量明確保存null值。這樣既能體現null作爲空對象指針的特性,又能區分null和undefined。

3.boolean類型

boolean類型只有兩個值:true和false。這兩個值與數值值不是一回事,因此true不一定等於1,false也不一定等於0。

boolean類型的字面值true和false是區分大小寫的。像True和False都不是boolean值,而是標識符。

雖然boolean類型的值只有兩個,但是其他類型的值都有與這兩個boolean值等價的值。將一個值轉換爲其對應的boolean值,需要調用Boolean()函數。

var msg="博客園";
alert(Boolean(msg)); // true

在上述代碼中字符串msg被轉換成了一個boolean值。可以對任何數據類型的值調用Boolean()函數,而且總會返回一個boolean值。這個值是true還是false取決於被轉換數值的數據類型和具體的值。

看如下各數據類型及對應的轉換規則:

                   數據類型                           轉換爲true的值                                 轉換爲false的值

                boolean                                     true                                                                  false          

                    string                                        非空字符串                                                         ""空字符串  

                    number                                     非零數值                                                            0 和 NaN    

                    objeact                                     任何對象                                                             null            

                    undefined                                 ----不適用                                                           undefined 

通過這些轉換規則,可以幫我們很好的理解控制流語句if自動執行相應的Boolean轉換:

var msg="博客園";
if(msg)
{
    alert("變量msg被轉換爲true");
}

運行上述代碼,就會顯示一個警告框。字符串msg被自動的轉換爲對應的Boolean值。明白這個原理,我們就能很好的在控制語句if中使用變量了。

4.number類型

3.1整數,最常用的就是十進制整數了。當然還有八進制、十六進制,這裏不做講解了。

需要注意的是在做算術計算時,所有以八進制和十六進制表示的數值最終都會被轉換成十進制數值。

3.2浮點數值,就是該數值中必須包含一個小數點,小數點後面必須有一位數字。

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

由於保存浮點數值需要的內存空間是保存整數值的兩倍,因此ECMAScript會自動把相應的浮點數值轉換爲整數值。如果小數點後面沒有跟數值(2.)或者後面跟了一個零(2.0),

這個值就會被作爲整數值來保存:

var num1=2.;
alert(num1);  // 2,小數點後沒有數值解析爲2

var num2=2.0;
alert(num2);  // 2,本身就是一個整數解析爲2

對於那些極大或者極小的數值,可以用e表示法(科學計數法)來表示浮點數值。

科學計數法的格式:整數/浮點數 + e/E + 10的冪中的指數

                             3.125           e            7  == 

var num1=3.125e7;  // 31250000

3.3數值範圍,由於內存的限制,並不能保存所有的數值。

能表示的最小值:Number.MIN_VALUE,這個值是5e-324

能表示的最大值:Number.MAX_VALUE,這個值是1.7976931348623157e+308

如果你的某次計算得到的值不在javascript最小和最大值這個範圍內,那麼你的值會被自動轉換成特殊的Infinity值。

如果這個值是負數,會轉換成-Infinity(負無窮);如果是正數,則是轉成Infinity(正無窮)。

3.4 NaN:非數值。有兩個特點:

一、任何涉及NaN的操作都會返回NaN(例如NaN/5).

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

alert(NaN==NaN); // false

針對NaN的這兩個特點,javascript定義了isNaN()函數。這個函數接收一個參數,該參數可以是任何類型,函數會幫我們確定這個參數是否“不是數值”。

isNaN()在收到一個值後,會嘗試將這個值轉換爲數值,某些不是數值的值會直接轉換爲數值,(字符串“10”或Boolean),任何不能被轉換的都會返回true

alert(isNaN(NaN)); // true
alert(isNaN(10)); // false 10是數值
alert(isNaN("10")); // false "10"可以被轉換爲數值10
alert(isNaN("博客園")); // true 不能轉換爲數值
alert(isNaN(false)); // false 可以被轉換爲0

5.String類型

字符串是 JavaScript 的一種基本的數據類型。

String 對象的 length 屬性聲明瞭該字符串中的字符數。

String 類定義了大量操作字符串的方法,例如從字符串中提取字符或子串,或者檢索字符或子串。

6.object類型


一組數據和功能的集合,對象可以通過new操作符來創建對象。

var obj=new Object();

可以自定義對象的屬性或方法:

var obj=new Object();
obj.name="張三";
obj.say=function(){
    alert(this.name)
}

還可以這麼寫:

var obj={
    name:"張三",
    say:function(){
        alert(this.name)
    }
}

結果是一樣的。

在javascript中object是所有對象的基礎,因此所有的對象都具有object的屬性和方法。

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