1.新增语义化标签
<section> 定义文档中的区段,页面上的版块,用于划分页面上的不同区域,或者划分文章里不同的节
<nav>定义导航
<asider> 定义文章的侧边栏
<figure> 标签规定独立的流内容(图像、图表、照片、代码等等)。
<figcaption> figure的子元素 用于对figure的内容 进行说明
<header>定义页眉、网页或section的头部
<footer>定义页脚 ,网页或section底部的内容
<hgroup>定义对网页标题的组合
<time></time>定义日期和时间
<dialog>定义一个对话框
<datalist></datalist>选项列表。与 input 元素配合使用,来定义 input 可能的值。
<mark>在视觉上向那些想要突出的文字,比如搜索结果中向用户高亮显示搜索关键词
<details></details>标签用于描述文档或文档某个部分的细节,summary是details元素的标题
< summary></summary> details 元素的标题。该元素用于摘录引用等 应该与页面的主要内容区
分开的其他内容
<progress> 进度条,运行中、加载中的进度。
<meter> 数据区间中绘制一个值的占比与状态
<audio></audio>定义音频,可以支持多个source(媒介标签,这里没有写错,这个标签可
以省略/),浏览器默认将第一个能识别的格式进行播放
<video></video> 定义电影片段或者其他视频流,支持三种类型的视频: Ogg、MPEG4、WebM
<svg>使用XML技术绘制可缩放矢量图形的语言,可使用扩展名.svg的xml定义,也可以内嵌在html中
<canvas> 用来进行canvas绘图,该标签为图形容器,通过js找到标签的操作对象来画图
2.什么是闭包,会对浏览器性能 有什么影响
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被
引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问
到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被
创建出来。
产生闭包的条件:
一个外部函数里面嵌套着一个内部函数;比如外部函数f1里面嵌套了一个内部函数f2
一个嵌套的内部函数调用了外部函数的内部变量或函数;比如f2内部函数调用了外部函数f1
的变量n只要满足以上两个条件,就产生了闭包。
3.作用域有哪些
1)什么是作用域
Javascript中的作用域说的是变量的可访问性和可见性。也就是说整个程序中哪些部
分可以访问这个变量,或者说这个变量都在哪些地方可见。
2) 作用域的类型
全局作用域
任何不在函数中或是大括号中声明的变量,都是在全局作用域下,全局作用域下声明的
变量可以在程序的任意位置访问
局部作用域
函数作用域也叫局部作用域,如果一个变量是在函数内部声明的它就在一个函数作用域
下面。这些变量只能在函数内部访问,不能在函数以外去访问。
块级作用域
ES6引入了`let`和`const`关键字,和`var`关键字不同,在大括号中使用
`let`和`const`声明的变量存在于块级作用域中。在大括号之外不能访问这些变量。
4.ajax 的流程
1) 创建 ajax
const xhr = new XMLHttpRequest()
2) 配置 ajax
xhr.open()
3) 发送 ajax
xhr.send()
4) 监听 ajax
xhr.onload = function () {
console.log(xhr.responseText)
}
Ajax的工作原理相当于在用户和服务器之间加了一个中间层(AJAX引擎),使用户操作与服务器响应异
步化。客户端发送请求,请求交给xhr,xhr把请求提交给服务器,服务器进行业务处理,服务器响应数据
交给xhr对象,xhr对象接收数据,由javascript把数据写到页面上
ajax 流程
利用了一个数字表明 ajax 当前运行到哪一步了
0:ajax 创建完毕
1:ajax 配置完成
2:ajax 发送完毕(后端已经对请求做出响应,并把请求返回 浏览器)
3:浏览器开始解析后端返回的内容,如果返回的数据比较少,那么此时就可以使用数据了,但是
有可能没有解析完毕,数据不完整,所以不推荐在这里使用数据
4: 浏览器的解析的内容已经全部处理完毕,我们可以开始是用数据了
5.继承
1) 原型继承
这种继承方式是将 自己的原型对象更改为 要继承的 父类的 实例化对象
缺点 自己的原型 被修改了
2)借用继承
借用继承就是将属性继承到自己的身上 这种继承方式 可以将父级的所有属性继承到子类
对象自身 但是父类的原型上的属性和方法,跟子类没有任何关系
3)组合继承
基于上述,将原型继承和借用继承组合起来,创建了一个 组合继承
优点: 能够继承到所有的属性和原型上的方法 并且属性能够继承到对象本身
缺点: 在原型上会多一套多余的属性
4)拷贝继承
5)ES6继承
在 实现 ES6 类的继承的时候,书写方式有几个要求
1. class 子类的类名 extends 要继承的父类类名 {}
2. constructor 内部 内部必须书写 super
它的 作用可以在调用的时候 对他进行传参,传参的参数会传递到 父类 中
注意: 哪怕父类不需要任何参数,我们的 super 也需要书写
并且需要书写在 constructor 内部的 第一行
当前方法只能 给 class 类 使用
但是可以继承到构造函数中的 内容, 也就是说 父类是 构造函数或者 class 都可以
6.原型链和 作用域链 的区别
当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止,
到查找到达原型链的顶部(也就是 Object.prototype),如果仍然没有找到指定的属性,
就会返回 undefined。
区别: 1. 作用域是对于变量而言,原型链是对于对象的属性。
2. 作用域链顶层是window,原型链顶层是Object。
联系:从链表开头寻找,直到找到为止。
7.模块化
必备条件
1)必须是服务器启动页面
2)在 script 标签 内 添加 type="module"
导出 export default { } 一个 文件只能书写一个
导入 import 变量 from '文件地址'
导入 export 变量
导出 import { 一一对应 } from '文件地址'
```
### 8.开发中用到对象 与 数组
```JS
数组: 开发中 比如说 商品列表。一些大体相同的
对象:针某一东西的详情
9.
const obj = { a:[] } 修改 属性 a 的地址 可不可以更换?
const onj = { a: [], name: 'sdaq' } 可不可以修改?
10. ES6 新增的方法 和 东西
1)解构赋值
2)箭头函数
3)展开运算符
4)this 指向
5)对象的优化
6)Set 与 Map 数据结构
11. promise
Promise 就像一个容器,里面存放着未来才会结束,返回结果的容器,返回的结果只需要在出口处
接收就好了。从语法上讲,Promise 是一个对象,从它可以获取异步操作的消息。
优点: 解决回调地狱,可以链式调用,使用更加灵活
Promise 的状态 只有两种 ,且 一个 promise 对象只能 改变 一次
resolve 成功后调用
rejectd 失败后调用
无论变成成功还是失败,都会且有一个结果数据
12. 构造函数 的注意事项
1)构造函数的函数名 建议首字母大写 (为了和普通函数 做一个区分)
2)构造函数将来在调用的时候,必须和 new 关键字 一起使用
3)构造函数内部 不需要书写 return
如果 手动返回了 基本数据类型,那么写了和 没写一样
如果 手动返回了 引用数据类型,那么写了之后构造函数失效
4)构造函数在使用的时候 内部 的 this 规则和 之前的 函数不太一样
因为一个函数和 new 关键字
13. 两个数组 和并 并删除第二个数据
<script>
let arr1 = [1,2,3,4,5]
let arr2 = [3,4,5,6,7]
let arrA = [...new Set([...arr1,...arr2])]
arrA.splice(1,1)
console.log(arrA)
</script>
14. 同步异步,宏任务与微任务
js是单线程的,所有的任务都要排队挨个执行,就好比做保健(执行js代码),
保健师傅只有一个(单线程),顾客(js代码)需排队享受服务,
排队的顺序按照顾客的种类(同步异步、宏任务微任务)和顾客到店顺序(在代码中的位置)执行
同步与异步、宏任务和微任务分别是函数两个不同维度的描述。
异步任务:setTimeout和setInterval、ajax、事件绑定等
同步任务:除了异步任务外的所有任务
微任务:process.nextTick和 Promise后的theny语句和catch语句等
宏任务:除了微任务以外的所有任务
15. 解决跨域
1) 为什么会 出现 跨域
同源策略 是 浏览器最基本的安全功能,如果缺少了 同源策略,浏览器很容易受到 XSS、CSFR
等攻击
同源策略 指的是 协议 + 域名 + 端口 三者相同 只要有一个 不同 就会出现 跨域
2) 跨域 会导致 什么 发生
请求能够正常发送
服务器也一定能够正常响应
但是浏览器 会认为 当前的请求不安全,然后将本次请求 的 信息拦截掉
16. BFC 的相关事宜
17. 本地存储 的区别
18. 数据类型转换
19。 == 与 === 的区别
20。 同源策略 (跨域)
21. get 与 post 的 区别
22. /^[a-z0-9]{6,8}$/i
23. jS 数据类型有哪些?
24. 判断数据类型的 所有方法
25. const a1 = { id: 'Qf001' }
const a2 = a1
a2.name = '张三'
? a1 中是否有?
深浅拷贝
26. ajax post 发生请求
27. 修改 this 指向
call()
apply()
bind()
28. 事件委托
29. 拖拽实现思路
30. 作用域, 变量提升, 作用域链, 暂时性死区
31. JS 影响性能
1.闭包
内存空间不被销毁,内存泄漏
2.大批量的操作 DOM 节点
32. 创建对象的 方式
33.本地存储的方案 有什么区别
34.实现 本地存储
35.
let t = 1
function a(text) {
let t = text++
}
a(t)
console.log(t)
36. 原生JS 做过什么事情
37. JSON 数据类型的理解
38. jsonp 利用什么 原理
39. 字符串 翻转