结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
2.共享引用
-
JS中实际对象传值不是真正的引用传值(传地址),而是传递引用的副本(call by sharing):按共享传递
-
对象赋值的本质是对象引用的副本
-
保存副本的对象如果是对对象本身进行操作:那么就是引用(操作原对象)
-
保存副本的对象如果是重新赋值:那么就重新开辟存储空间
// 1.对象共享传递
var obj1 = { name: ‘我是本体’ };
// 2.对象引用(共享)
var obj2 = obj1;
var obj3 = obj1;
// 3.引用的改变效果:如果操作的是对象本身(属性或者方法)那么操作的是原对象obj1,如果把保存引用的变量赋值其他任何类型数据,那么都会重开内存(不影响obj1)
obj2.name = ‘我是新本体’; // obj2操作的是obj1本身的对象,所以修改是共用的(不开辟新空间)
console.log(obj1); // {name: “我是新本体”}
obj3 = 1; // obj3独立开辟内存空间保存1,与obj1和obj2不再有关联
console.log(obj1); // {name: “我是新本体”}
// 共享引用:共享引用是JS中复杂数据类型的本质传递方式而已
3.基本包装类型
-
本身是基本数据类型,但是在执行代码的过程中,可以调用相关的属性和方法
-
JS中有三种基本包装类型
-
Number
-
String
-
Boolean
/*
// 问题:为什么num是一个基本数据类型,可以像对象一样调用方法呢?
// 基本数据类型
var num = 10;
console.log ( typeof num );
num.toString () ;
/*
本质相当于执行了以下代码(JS解释器检测到num调用来toString()方法,所以快速处理了)
(1) var num = new Number(10); // 创建对象
(2) num.toString(); // 调用对象方法
(3) num = null; // 删除对象
*/
// 对象类型
var num1 = new Number(10);
/*
由于num1本身就是对象类型,所以这里可以直接调用,无需转换
*/
num1.toString();
console.log ( num1 );
console.log ( typeof num1 ); // object
var str = ‘111’;
str.toString();
/*
(1)var str = new String(‘111’);
(2)str.toString();
(3)str = null;
*/
var bol = true;
bol.toString();
/*
(1) var bol = new Boolean(true);
(2) bol.toString();
(3) bol = null();
*/
/*
基本包装类型和引用类型(new Number()/String()/Boolear()的区别
1.new产生的对象是长期占用内存,直到脚本结束
2.基本包装类型属于后台瞬发,用完就销毁了对象:对象 = null
所以:String/Number/Boolean,我们在开发中都是使用基本包装类型
*/
4.数组去重
数组去重:将数组中重复的元素去掉
-
JS数组没有删除具体元素的删除(只能删掉值,删不掉元素的索引),可以使用另外一个结构来进行存储
-
新数组
-
新对象
-
JS数组虽然本质可以删除第一个和最后一个元素,可以利用这一特性,交换当前重复的元素到最后,然后进行删除(pop() 或者length–)