JavaScript的數(shù)據(jù)類型可以分為兩種:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。它們?cè)谑褂谩⒋鎯?chǔ)方式、傳遞方式和處理方式等方面有所不同。
基本數(shù)據(jù)類型包括Number、String、Boolean、null和undefined。Number類型可以表示任意數(shù)字,包括整數(shù)和浮點(diǎn)數(shù);String類型表示任意字符集合,可以用單引號(hào)、雙引號(hào)或反引號(hào)表示;Boolean類型只有兩個(gè)值true和false;null是一個(gè)表示“空”的特殊值,表示一個(gè)空對(duì)象;undefined表示一個(gè)未定義或不存在的變量。
// 基本數(shù)據(jù)類型的聲明和初始化 var num = 123; var str = 'abc'; var bool = true; var empty = null; var undef = undefined;
引用數(shù)據(jù)類型包括Object、Array和Function。Object類型是JavaScript中最基本的數(shù)據(jù)類型,它表示一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),包含多個(gè)屬性和方法;Array類型表示一個(gè)數(shù)組,它可以包含任意多個(gè)元素,每個(gè)元素可以是任意類型的數(shù)據(jù);Function類型可以表示一個(gè)函數(shù),它可以接受參數(shù)并返回結(jié)果。
// 引用數(shù)據(jù)類型的聲明和初始化 var obj = { name: 'Jack', age: 18 }; var arr = [1, 'a', true]; var func = function(x, y) { return x + y; };
基本數(shù)據(jù)類型和引用數(shù)據(jù)類型在賦值、傳遞和比較時(shí)有所不同。基本數(shù)據(jù)類型的賦值是直接復(fù)制存儲(chǔ)的數(shù)值,而引用數(shù)據(jù)類型的賦值則是復(fù)制存儲(chǔ)的引用地址。例如:
var a = 123; var b = a; a = 456; console.log(b); // 輸出123 var obj1 = { name: 'Jack', age: 18 }; var obj2 = obj1; obj1.age = 20; console.log(obj2.age); // 輸出20
在函數(shù)傳遞參數(shù)時(shí),基本數(shù)據(jù)類型是值傳遞,即傳遞的是數(shù)值的副本,而引用數(shù)據(jù)類型則是引用傳遞,即傳遞的是地址的副本。例如:
function changeNum(num) { num = 456; } var a = 123; changeNum(a); console.log(a); // 輸出123 function changeObj(obj) { obj.age = 20; } var o = { name: 'Jack', age: 18 }; changeObj(o); console.log(o.age); // 輸出20
在比較數(shù)據(jù)類型時(shí),基本數(shù)據(jù)類型可以用==、!=、===、!==等運(yùn)算符進(jìn)行比較,引用數(shù)據(jù)類型的比較則要考慮是否指向同一個(gè)對(duì)象。例如:
console.log(123 == '123'); // 輸出true console.log(123 === '123'); // 輸出false var obj1 = { name: 'Jack', age: 18 }; var obj2 = { name: 'Jack', age: 18 }; console.log(obj1 == obj2); // 輸出false console.log(obj1 === obj2); // 輸出false var obj3 = obj1; console.log(obj1 == obj3); // 輸出true console.log(obj1 === obj3); // 輸出true
在JavaScript中,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型都有其獨(dú)特的特點(diǎn)和用處,我們需要根據(jù)具體情況進(jìn)行選擇和使用。