基本類型和復雜類型
- 基本類型(簡單數據)
- string
- number
- boolean
- undefined
- null
- 復雜類型(復雜數據類型)
- Object
- Array
- Date
- RegExp
- Function
- String
- Number
- Boolean
- null
- Math
值類型和引用類型
- 值類型和引用類型簡單說明
-
值類型主要有:
- 數值
- 字符串
- 布爾類型
- undefined
- null
-
引用類型主要有:
- 對象(Object類型)
- 數組(Array)
- 函數 (Function)
值類型:保存為簡單的數據值,賦值只是簡單的數據值的復制
引用類型:保存為對象,其本質是指向內存位置的引用(地址),賦值是對地址的復制
值類型代碼示例
var num1 = 10;
var num2 = num1; //把num1的值復制一份給num2,num1和num2的值相等,除此之外沒有任何其他關系
console.log(num1,num2); //10,10
console.log(num1 == num2); //true
num2 = 20; //修改num2的值為20,不會對num1產生任何的影響
console.log(num1,num2); //10,20
console.log(num1 == num2); //false
引用類型代碼示例
var arr1 = [1,2,3];
var arr2 = arr1;
console.log(arr1,arr2); //[1,2,3],[1,2,3]
console.log(arr1 == arr2); //true
var arr3 = [1,2,3];
console.log(arr3); //[1,2,3]
console.log(arr1 == arr3,arr2 == arr3); //false,false
/**
* 代碼說明:
* arr1和arr2在比較的時候,值相等(都是[1,2,3]),且引用相等(都指向堆中同一塊數據),因此arr1和arr2相等
* arr3和arr1以及arr2比較的時候,值相等([1,2,3]),但是引用不相等(arr3指向的是堆中另外一塊數據),因此不等
* 總結:引用類型在比較相等的時候,只有值和引用都相等才相等
* */
- 值類型和引用類型的賦值
賦值操作(=):把當前變量存儲的值復制一份給接收的變量
值類型的賦值:把當前變量存儲的值(具體的數據)復制一份給接收的變量 引用類型的賦值:把當前變量存儲的值(具體數據的引用即地址)復制一份給接收的變量
//引用類型使用注意
console.log(arr1,arr2); //[1,2,3],[1,2,3];
console.log(arr1 == arr2); //true
arr1.push(4);
console.log(arr1,arr2); //[1,2,3,4],[1,2,3,4]
/**
* 代碼說明:因為arr1和arr2內部的引用指向的是同一塊數據,所以修改了arr1會對arr2也產生影響
* */
- 值類型和引用類型作為函數參數處理
形參:占位用的參數,用來接收數據的參數而已
實參:實際傳遞的參數 ---
函數的調用:在函數調用的時候,函數默認會把實參的值賦值給形參
值類型作為參數:在函數內部對形參變量進行修改不會影響到實參的值
引用類型作為參數:在函數內部對形參變量進行修改會影響到實參的值,因為他們的引用指向同一個對象
- 值類型和引用類型的相關圖示
基本類型的賦值
var str1 = "hello zhangsan";
var str2 = str1;
引用類型的結構和賦值
```
var car = {
color:"黑色",
number:"B99"
};
var p1 = {
name:"王寶寶",
age:30,
car:car
};
```
var obj1 = {
name:"lisi",
age:18
};
var obj2 = obj1;