1. 程式人生 > >js 數據類型的初步理解

js 數據類型的初步理解

borde bool 操作 內存 contain tex array 數組 構造函數

1、js中的類型

字符串、數字、布爾、數組、對象、Null、Undefined

①基本數據類型

null、undefined、boolean、number、string

console.log(typeof 1);//number

    console.log(typeof "a");//string

    console.log(typeof null);//object

    console.log(typeof undefined);//undefined
    
    console.log(typeof true);//boolean

但是 typeof null 的返回值卻是 object ,js中定義的null 是一個特殊的對象。更確切的說,null是一個空對象的指針,指向一個空對象。以此來和undefined區分開。

為了便於操作基本類型值,ECMAScript還提供了三個特殊的引用類型:Boolean、Number和String,標準庫提供了構造函數來封裝布爾值、數字和字符串作為對象。這些類型與其他引用類型相似,同時也具有與各自的基本包裝類型相應的特殊行為。實際上,每當讀取一個基本類型值時,後臺就會創建一個對應的基本包裝類型的對象,從而讓我們能夠調用一些方法來操作這些數據。

1 2 3 var s1 = "some text"; var s2 = s1.substring(2); var s3 = new String("some text");

但是不同於原始的字符串,String對象是一個真正的對象。

1 2 typeof s1; //"string" typeof s3; //"object"

這個例子中的變量s1包含一個字符串,字符串當然是基本類型值。而下一行調用了s1的substring()方法,並將返回的結果保存在s2中。我們知道,基本類型值不是對象,因此從邏輯上講,它們不應該有方法(但是它們確實有方法)。其實,為了讓我們實現這種直觀的操作,後臺已經自動完成了一系列的處理。當第二行代碼訪問s1時,訪問過程處於一種讀取模式,也就是從內存中讀取這個字符串的值。而在讀取模式中訪問字符串時,後臺都會自動完成下列處理:

(1)創建String類型的一個實例。

(2)在實例上調用指定方法。

(3)銷毀這個實例。

特點是:

基本數據類型的值是不能影響其他值改變的。

//傳遞基本類型時,實參傳入的是該元素的一個副本,該元素本身並不變化。
    var a = true;//boolean
    function arr(argument) {
        argument = false;
        console.log(argument);
    }
    arr(a);//false
    console.log(a);//true


    var b = 1;//number
    function num(argument){
        argument = argument-1;
        console.log(argument);
    }
    num(b);//0
    console.log(b);//1

    var c = undefined;
    function und(argument){
        argument = 1;
    }
    und(c);//1
    console.log(c);//undefined

    var d = "asdf";//string

    function str(argument){
        argument = argument.slice(1,2);
        console.log(argument);
    }
    str(d);//s
    console.log(d);//asdf

②引用類型。

引用類型通常叫做類(class)。

object、array。

引用類型的值存儲在 內存中的棧區和堆區。

var a = {}. var b=a;

賦值給b的實質上堆區的一個指針,指向a對象的值。

所以,當a的值改變時,b的值也會隨之改變。

var e = {};//obiect 
    var f = e;
    function obj(argument){
        argument.name = "onject";
        console.log(e.name);
    }
    obj(e);//onject
    console.log(e.name);//onject
    console.log(f.name);//onject

js 數據類型的初步理解