js 數據類型的初步理解
阿新 • • 發佈:2017-10-20
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 數據類型的初步理解