原始值
原始值包括undefined null 布爾值 數(shù)字 字符
原始值是不可更改的
字符串的操作比如str.toUpperCase()
不會改變str的值倍权,只是返回一個新的原始值
原始值的比較是值的比較
var s1 = 'hello', s2 ='hello'
s1 == s2 //true
s1 === s2 //true
對象
對象是可變的
var person = {name:'Mike',age:18}
person.age = 22
var a = [1,2,3] //數(shù)組也是對象
a[1] = 5
對象的比較不是值的比較:即使兩個對象有相同的屬性,屬性的值也相等捞烟,它們也不相等薄声,兩個單獨(dú)的對象永不相等
var p1 = {name:'mike',age:18}, p2 = {name:'mike',age:18}
p1 == p2 //false
p1 === p2 //false
var a = [1,2], b =[1,2]
a == b //false
a === b //false
對象又被成為引用類型(reference type),區(qū)分于基本類型坷襟,對象的值都是引用奸柬,對象的比較是引用的比較,即只有兩個引用了同一個對象婴程,它們才相等。
兩個對象變量引用同一個對象抱婉,則值同時變化
var p1=p2={name:'Mike',age:18}
p1.age = 22
p2.age //22
所以建立對象的副本档叔,要建立一個新的對象,然后逐個拷貝對象的屬性蒸绩。
var p1={name:'Mike',age:18}
var p2 = {}
p2.name = p1.name
p2.age = p1.age
p2 // {name: "Mike", age: 18}
總結(jié):
基本類型即原始值的比較是值的比較衙四,對象是引用的比較。