Javascript学习笔记——3.7 不可变的原始值和可变的对象引用

原始值

原始值包括undefined null 布尔值 数字 字符
原始值是不可更改的
字符串的操作比如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] //数组也是对象
a[1] = 5

对象的比较不是值的比较:即使两个对象有相同的属性,属性的值也相等,它们也不相等,两个单独的对象永不相等

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),区分于基本类型,对象的值都是引用,对象的比较是引用的比较,即只有两个引用了同一个对象,它们才相等。
两个对象变量引用同一个对象,则值同时变化

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}

总结:
基本类型即原始值的比较是值的比较,对象是引用的比较。

你可能感兴趣的:(Javascript学习笔记——3.7 不可变的原始值和可变的对象引用)