!一、JS基础知识
一、JS基础-变量类型和计算
1 JS 值类型和引用类型的区别
1.1.JavaScript中的变量类型有哪些?
(1)值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null (这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值)(ECMAScript 2016新增了一种基本数据类型:symbol ECMAScript 6入门 )
(2)引用类型:对象(Object)、数组(Array)、函数(Function),但函数不用于存储数据,没有拷贝复制函数一说
1.2、 值类型和引用类型的区别
(1) 存储位置不一样
值类型占用空间固定,保存在栈中,保存与复制的是值本身,可以使用 typeOf()检测值的类型.
引用类型占用空间不固定,保存在堆中,保存与复制的是指向对象的一个指针,需要使用 instanceof() 检测数据类型,使用 new() 方法构造出的对象是引用型.
(2) 复制方式不一样
值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a,两份数据在内存中是完全独立的。
引用类型的变量直接赋值实际上是传递引用,只是浅复制.是将变量中的存储的地址赋值一份单独存储,但是两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。
(3) 值类型无法添加属性和方法,引用类型可以添加属性和方法。
(4) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。引用类型的比较是引用地址的比较
比较的时候注意双等号在做比较的时候做了类型转换,而全等号是值和类型相等是才能相等
2 手写 JS 深拷贝
2.1、type of运算符
2.1.1识别所有的值类型
2.1.2识别函数
2.1.2判断是否是引用类型(不可再细分)
2.2、深拷贝
(1)先判断值类型和引用类型,如果是null,直接返回obj
(2)如果是引用类型,判断是数组还是对象 用instanceof
(3)递归
2.3、变量计算-数据类型转换
(1)字符串拼接
(2)==运算符
(3)if语句和逻辑运算
二、原型和原型链(超重要,必问!!!!)
1、如何准确判断一个变量是不是数组?
a instanceof Array
2、手写一个简易的jqurey:(等看完再更新)
3、class的原型本质,怎么理解?
原型和原型的图示
属性和方法的执行规则
知识点:class的继承、类型判断instanceof、原型和原型链
1、class
2、继承
extends关键字来继承
super执行父类的构造函数
扩展和重写
3、JS原型
隐式原型:proto
显示原型:prototype
子类.proto===父类.prototype //true
例如xiaoming.proto===Man.prototype
原型关系:
(1)、每个class都有显示原型prototype,
(2)、每个实例都要隐式原型__proto__,
(3)、实例的隐式原型__proto__指向对应class的显示原型prototype
基于原型的执行规则:
获取属性xiaoming.uname或者执行xiaoming.sayHi()时,先在自身属性和方法寻找,如果找不到则自动取隐式原型__proto__中查找
4、原型链
三、作用域和闭包(很重要!!!)
题目:创建10个,点击哪个,弹出哪个的序号
1、作用域与自由变量
2.1作用域:
全局作用域:window对象、document对象。。。
函数作用域:只能在当前函数里使用
块级作用域:在循环,条件等语句中使用
2.2自由变量
在当前作用域没有被定义,但被使用了,
向上级作用域一层一层依次寻找,直到找到为止
如果全局作用域都没找到,直接报错 xxx is not defined) 2、闭包:
所有的自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是执行的地方!!!
作用域应用的两种情况:
(1)函数作为参数被传递
(2)函数作为返回值被返回
3、this:取什么值,是在函数执行中确定的,不是在函数定义确定的!!!
作为普通函数
使用call、apply 、bind
作为对象方法调用
定时器延时器调用
在class方法中调用:this指的是new出来的实例对象
箭头函数:上级作用域的值
4-4手写bind函数:学完再更新 四、异步和单线程
题目:
同步和异步 的区别
手写promise加载一张图片
前端使用异步的场景有哪些?
1、单线程和异步
JS单线程语言,只能同时做一件事
浏览器和node.js已经支持JS启动进程,如Web Worker
JS和DOM渲染共用同一个线程,因为JS可以修改DOM结构
遇到等待(网络请求,定时任务)不能卡住
需要异步
回调callback函数形式
同步和异步是基于JS单线程语言的,异步不会阻塞代码执行,同步会阻塞代码执行
2、异步的应用场景
网络请求,如ajax图片加载
定时任务,如setTimeout
3、callback 和Promise
5-3 ~ 5-6看完es6再看 !二、JS WebAPI
一、DOM
题目:
DOM属于哪种数据结构?DOM树
DOM操作的常用API:节点操作和结构操作
attribute和property的区别:
property修改的是对象属性,不会体现在html结构中;attribute修改的是html属性,会改变html结构;这两个都会引起DOM重新渲染,尽量用property
一次性插入多个DOM节点,考虑性能:先创建一个文档片段,将创建的元素一次性插入到文档片段中,最后再将文档片段插入到DOM树
知识点:
1、DOM的本质
从HTML文件解析出来的DOM树
2、DOM节点操作
2.1、获取DOM节点
2.2、attribute:设置的是标签的属性
2.3、property:修改JS变量的属性
3、DOM结构操作
3.1、新增/插入节点
3.2、获取子元素列表,获取父元素
3.3、删除子节点
3.4、DOM性能(重要!!)
二、BOM
题目:
如何识别浏览器类型?
分析拆解URL各个部分
知识点:
navigator:查看当前浏览器信息
screen:查看屏幕的宽高
location
history
三、事件绑定和冒泡
编写一个事件监听函数
描述事件冒泡流程:基于DOM树结构,事件会顺着触发元素往上冒泡,应用场景是事件委托
无限下拉图片列表,如何监听每个图片的点击?事件代理,用e.target获取触发元素,用matches来判断是否是触发元素
代码简洁、减少浏览器内存占用,在父元素上绑定,不要滥用
四、ajax:学完在更新
五、存储:学完在更新