JavaScript高级程序设计学习笔记(二)高级程序设计学习笔记(二)
最近花了一天看完了第四章(变量、作用域和内存问题)和第五章(引用类型)第四章(变量、作用域和内存问题)和第五章(引用类型),然后隔天就被同学拉去干活了,身心俱疲。
先把第四章的笔记总结一下,怕回头忘光了哈哈。以下的笔记是书上一些我以前学习的时候,没有太重视的js基础知识,也有
一些面试知识的拓展,通过博客回顾并加深理解,希望我的学习过程对你有所帮助。
第四章第四章
基本类型和引用类型基本类型和引用类型
在ECMAScript中有两种不同数据类型的值:基本类型值和引用类型值基本类型值和引用类型值,基本类型值基本类型值是指简单的数据段,而引用类型值引用类型值指的是
那些可能由多个值构成的对象。
Undefined、Null、Boolean、Number、String这五种基本数据类型都是按值访问的,它们是基本类型值。
而引用类型的值是保存在内存中的对象,在JavaScript中不允许直接访问内存中的位置,也就是不能直接操作对象的内存空
间。当我们操作对象的时候,实际上是在对对象的引用进行操作,而不是实际的对象(相当于说有个媒介,然后媒介把更新反
映到实际对象上)。
var person=new Object();
person.name="LeoLoge";
console.log(person.name); //"LeoLoge",通过引用给对象添加了动态的属性。
复制变量值(基本类型和引用类型)复制变量值(基本类型和引用类型)
基本类型值的复制基本类型值的复制
先看代码:
var num1=5;
var num2=num1;
var num1=4;
console.log(num1); // 4
console.log(num2); // 5
基本类型值的变量复制是为新变量创建一个新的基本类型值,然后把原变量的值赋给新变量的值(简单理解就是有个新的副
本,在堆内存里)。当我操作了num1,num2不会变化。这说明这两个变量在创建后是互相独立,不耦合的,可以随意操作而
不相互影响。
引用类型值的复制引用类型值的复制
先看代码:
var obj1=new Object();
var obj2=obj1;
obj1.name="LeoLoge";
console.log(obj2.name); //"LeoLoge"
当新变量从原变量复制引用类型值的时候,同样也会把存储在变量对象里的值复制一份放到新变量的内存空间里。但不同的是
这个副本它是一个指针,这个指针指向了堆内存里的一个对象。当复制结束后,这两个变量实际上引用了同一个对象(可以理
解成一个保险柜,但是有两把钥匙,这两把钥匙就是这两个变量的值,它们引用的目标是同一个保险柜)。
这会导致改变其中一个变量,另一个变量也会受影响。
如果你想避免在使用引用类型的时候发生这种耦合的现象,希望新变量指向堆内存里的一个新对象,你可以了解一下深浅拷深浅拷
贝贝。
深浅拷贝(面试考点)深浅拷贝(面试考点)
这里拓展一下书上暂时没讲到的深浅拷贝深浅拷贝,有助于理解两种变量类型的复制,同时也是面试面试喜欢考的知识点(虽然我暂时还没
被问到过哈哈哈):
~浅拷贝浅拷贝
浅拷贝的一些做法有:
1、、Object.assign
let a = {
age: 1
};
let b = Object.assign({}, a);
a.age = 2;
console.log(b.age); // 1
2、、ES6的展开运算符(的展开运算符(…))
let a = {