基本类型 (numberm string, boolean, null, undefined,symbol)
1.基本类型的值是不可变的
任何方法都不能改变一个基本类型的值
var name = 'pp'
name.toUpperCase(); // PP
console.log(name); //pp
基本类型的值不能添加属性和方法
var person = 'pp'
person.age = 22
person.method = function(){}
console.log(person.age) // undefined
console.log(person.method) // undefined
更加证明基本类型的值是不可变的
2.基本类型的比较是值比较
只有在他们的值相等的时候它们才相等
var a = 1
var b = true
console.log(a == b) // true 当两个值的类型不同的时候==运算符会进行类型转换
console.log(a===b) // false
3.基本类型的变量是存放在栈区的(栈区值内存里的栈区)
栈区包括了变量的标识符和变量的值
引用类型(Object, Array, Function, Date) 除了基本类型就是引用类型
1.引用类型的值是可变的
可以为引用类型添加/删除属性和方法
var attr = {}
attr.name = 'Pp'
attr.age = 18
attr.method = function () {
console.log(attr.age)
}
console.log(attr.name) // name
attr.method() // 22
delete attr.age
console.log(attr.age) // undefined
2.引用类型的值是同时保存在栈内存和堆内存中的对象
JS不允许访问内存的位置,也就是说不能直接操作对象的内存空间.我们操作对象实际上是操作对象的引用
所以引用类型的值都是按引用访问的.
引用类型的储存需要内存的栈去和堆区共同完成,栈区内存保存变量标识符和指像堆内存中该对象的指针
3.引用类型的比较是引用的比较
var attr1 = {}
var attr2 = {}
console.log(attr1 == attr2) // false
引用类型时按引用访问的,比较两个对象的堆内存的地址是否相同
网友评论