JS的基本类型和引用类型

2020-03-28  本文已影响0人  綪比纸薄

基本类型 (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

引用类型时按引用访问的,比较两个对象的堆内存的地址是否相同

上一篇下一篇

猜你喜欢

热点阅读