面向对象概述

对象具有的唯一标识,对象包括属性和方法,属性就是需要记忆的信息,方法就是能够提供的服务。在面向对象的编程中,对象就是某一个类的实例

面向对象的过程中,重要的就是类和实例

怎么去理解类和实例?

比如我们生活中。在班级中有一类人每天无所事事,不好好学习,混吃混完。这“类”人在编程语言中可以统称为类,实例就是这类人的某一个,比如在这类人中有一个叫做小明的,这个小明就是编程语言中的实例

JavaScript是基于面向对象的。因为JavaScript是没有类的概念的(es6之前)

 

基本类型值和引用类型值

JavaScript的语言分为两部分,语言核心和DOM

JavaScript的数据类型有哪些

  • 基本类型值:number、string、boolean、undefined、null
  • 引用类型值:Object、Array、Function、RegExp、Math、Date

为什么要区分基本数据类型和引用数据类型?

区别1:基本数据类型在内存中都是“栈”内存,引用数据类型都是“堆”内存

我们可以把内容抽象为下图的样子

我们可以发现基本类型值,都是存储在内存中的一个很小的单元中,我们可以称基本类型值为栈内存

什么是栈?我们可以抽象为“羽毛球筒”

先进入的后出去,这种结构就是栈结构,内存也是栈内存FILO(fist in last out)

栈结构的特点就是快,栈顶的活动空间特别大,修改的时候一定是先释放到栈顶,然后再从栈顶弹出

 

对于引用类型值,处理办法是堆内存

var arr = [1,true,null,undefined,’hello’]

此时不仅仅要存储数据内容,还需要记录数据的顺序以及数据结构,堆内存其实就是一堆栈空间

看上图可以理解为,引用类型值就是将当前的数据内容和地址以及数据结构存到了一堆内存中,互相记录地址

 

区别2:基本类型值在进行赋值的时候,是在内存中克隆一份值,引用类型值在复制的时候,只传地址

从基本类型值来说

 <script>
        var a=100;
        var b=a;
        console.log(a,b)
    </script>

 

初始赋值

 

接下来将a变为了200

<script>
        var a=100;
        var b=a;
        a=200
        console.log(a,b)
    </script>

 

 

 

 

此时会发现本质上a和b是两个内存空间,互相不影响,所以输出结果是100,200

 

再看引用类型

 <script>
        var arr1 = [1,true,null,undefined,'hello']
        var arr2 = arr1
        console.log(arr1,arr2)
    </script>

 

 此时的值是一样的

 

引用类型值的赋值不会将值直接赋值一份,而是同时指向了同一个地址,如果指向的地址发生变化,那么都会变化 

<script>
        var arr1 = [1,'hello']
        var arr2 = arr1
        console.log(arr1,arr2)
    </script>

 

posted @ 2022-01-01 22:30  keyeking  阅读(56)  评论(0编辑  收藏  举报