连着更新连我自己都惊了!!!∑(゚Д゚ノ)ノ,嘛一点一点积累这来吧,虽然这块之前早就看过了。不过像这种基础理论知识还是的好。就算自己平时用不到,但保不准哪天换工作了面试会问到。所以老规矩在复习复习。
基本类型
- 基本类型指的是简单的数据段。String、 Boolean、Number、Symbol、Undefined以上几个类型都属于基本类型。
- 可以用typeOf能判断出具体是什么类型,null除外(null用type检测会是object)。
- 不能给基本类型的值添加属性。(虽然不会报错但是给她一个属性访问结果会是 undefined)
- 一个变量到另一个变量赋值的时候,会复制一个新值,然后把这个值分配给另一个变量。
引用类型
引用类型指的是简单的数据段。是保存在内存中的对象,JS不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型是按照引用访问的·
- 当一个变量赋值给另一个变量时,也会复制一份新的给另一个变量,不过此时复制的只是个指针(指向储存在堆中的一个对象)。复制操作结束后两个变量实际上引用的是一个变量,因此改变其中一个另一个也会随之改变。
区别
传值与传址
- 基本类型就像一个富人,你想要富人手里的乐吧薯片。人家说自己还不够吃呢。然后反手给你买了个一样口味的薯片。现在你们俩的薯片是相对独立的。他吃没了不代表你的薯片也没了。
- 引用类型就像一个穷人,你还是想吃它的薯片。因为他穷没钱给你买新的,所以你俩只能吃同一包。如果他(你)把薯片吃没了,那就是真的没了。
存储位置
- 基本类型是个富人肯定要住在大高楼里,所以我们说基本类型是存储在栈内存中的。
- 引用类型是个穷人所以只能扎堆的住平房棚子,所以我们说基本类型是存储在堆内存中。
参数传递
ECMAScript 中所有的函数参数都是按值传递。也就是说把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型的传递和基本类型的变量一样的复制一样,而引用类型类型的值传递则如同引用类型变量的复制一样。下面两个例子:1
2
3
4
5
6
7
8
9// 基本类型参数传递
let count = 20
let result = add (count)
function add (num) {
num+=10
return num
}
console.log(count) // 并没有被影响还是输出 20
console.log(result)
1 | let superMan = new Object |