JS中值類型與引用類型分析

JavaScript中的值類型與引用類型

數據類型 值/引用類型 備註
undefined 值類型 無值
number 值類型
boolean 值類型
string 值類型 字符串在賦值運算中會按照引用類型的方式來處理
function 引用類型
object 引用類型


在JavaScript中,“全等(===)運算符”用來對值類型/引用類型的實際數據進行比較和檢查。按照約定,基於上述類型系統的運算中(以下所謂“值”,也包括undefined):

  • 一般表達式運算的結果總是值
  • 函數/方法調用的結果可以返回值或者引用
  • 值與引用、值與值之間即使等值(==),也不一定全等(===)
  • 兩個引用之間如果等值(==),則一定全等(===)

從表面上來看,一個值應該與其自身“等值/全等”。但事實上,在JavaScript中存在一個例外:一個NaN值,與其自身並不等值,也不全等。

舉幾個栗子:

0 == "0" //true
0 === "0" //false
1 == true //true
0 == true //false
's' == 's' //true
new String('s') == new String('s') //false 這裏都是引用

兩種類型在函數調用時的區別

JavaScript中的值類型與引用類型,同其他通用高級語言一樣,表達的含義是數據在運算時的使用方式:參與運算的是其值亦或其引用。因此在下面的示例中,不同的值類型通過相同的函數調用之後輸出的是不同的結果。

//1
function newToString(){
    return 'Hello World!';
}

function func(val){
    val.toString = newToString;
}

var str = 'abc';
var strTemp = new String(str);
func(str);//只傳入了str的值,因此對它的toString修改是無意義的
console.log(str);//abc
func(strTemp);//傳入引用,修改toString屬性會影響到後面的運算。
console.log(strTemp);//Hello World!

//2
function addNum(num){
    num+=num*2;
    return num;
}

var num = 1;
var result = addNum(num);
console.log(num);//1
console.log(result)//3

//3
function setName(obj){
    obj.name = 'Jack';
    obj = new Object(); //創建一個新的對象,並且把新對象的地址賦值給obj,所以obj並不指向外面的obj。
    obj.name = 'Jacky';
}

var obj = new Object();
obj.name = 'test';
setName(obj);
console.log(obj.name);//Jack
發佈了21 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章