函数声明和函数表达式区别
- 函数声明会被变量提升到顶部作用域
- 函数表达式只有执行到此处才会赋值,执行必须在表达式之后
- 函数声明必须有函数名
document.write
和innerHTML
区别
document.write
:将需要展示的内容添加到一个文档模型(DOM)里,会造成页面重绘innerHTML
: 设置或获取HTML某个元素中的内容.只会对影响的DOM元素重绘
将多维数组降维
1 | function deepFlat(arr = []) { |
全屏和退出全屏
1 | //全屏 |
常用字符串函数
charAt
:返回指定位置的字符,concat
:连接字符串,includes
:是否包含某个字符串startWith,endWith
:是否已给定字符开头或结尾,indexOf,lastIndexOf
:查找字符串第一次/最后一次出现的位置,找不到返回-1split
:转化成数组,slice
:截取范围内字符串,并返回,不会改变原字符串substr(开始位置,截取长度)
:截取字符串,MDN已不推荐使用substring(开始位置,结束的索引(不包含))
:截取字符串toUpperCase
: 转化大写toLowerCase
:转化为小写
substr(start,length)
,slice(beginIndex[,endIndex])
,substring(beginIndex[,endIndex])
区别
参数为正
slice
,substring
从开始索引,到结束索引截取substr
从开始索引,到需要截取的字符长度截取
参数为负
substr
:- 如果为负值,则被看作
strLength +
start,其中
strLength` 为字符串的长度, - 第二个参数0或者负,则返回空字符串
- 如果为负值,则被看作
slice
:- 任何一个参数如果值为负数,会被当做
strLength + beginIndex/endIndex
看待,这里的strLength
是字符串的长度
- 任何一个参数如果值为负数,会被当做
substring
:- 如果任一参数小于 0 或为
NaN
,则被当作 0, - 如果
indexStart
大于indexEnd
,则substring
的执行效果就像两个参数调换了一样
- 如果任一参数小于 0 或为
1 | var str = 'hello world'; //strLength = 11 |
简述ajax请求步骤
- 创建ajax请求
let xhr = new XMLHttpRequest()
- 连接服务器
xhr.open("GET","url",true)
- 发送请求
xhr.send()
- 接受响应
xhr.onreadychange = function () {}
ajax请求状态
状态码 | 状态常量 | 描述 |
---|---|---|
0 | XMLHttpRequest.UNSENT | 代理被创建,但尚未调用 open() 方法。 |
1 | XMLHttpRequest.OPENED | open() 方法已经被调用 |
2 | XMLHttpRequest.HEADERS_RECEIVED | send() 方法已经被调用,并且头部和状态已经可获得。 |
3 | XMLHttpRequest.LOADING | 下载中; responseText 属性已经包含部分数据 |
4 | XMLHttpRequest.DONE | 下载操作已完成。 |
函数执行过程
- 当执行一个函数时,会先创建一个执行上下文,然后将函数放到函数栈的顶部
- 执行函数,如果函数中还有其他函数,则将遇到的函数放到函数栈的顶部,执行该函数
- 当某个函数执行完毕后,该函数出栈,执行上一个函数,一次循环,最终最初执行的函数出栈
异步编程的方式
- 回调函数
- Promise
- async/await
复制粘贴
1 | const copyText = elementValue => { |
ES5,ES6,ES7区别
ES5
- 严格模式
- JSON API
- object Api
- Array Api
ES6
- 引入类
- 模块化
- 箭头函数
- 函数参数默认值
- 模板字符串
- 解构赋值
- Promis
- let,const
ES7
- Array.prototype.includes
- 指数运算符 **
onload和onDOMContentLoaded
- onload:在页面资源全部加载完成后触发
- domContentLoaded:在DOM节点加载完成就触发,不需要等待样式,图片等
btoa和atob
btoa
base64编码atob
base64解码atob和btoa不能编码Unicode字符
可以通过
encodeURIComponent
编码,在base641
2
3
4
5
6
7
8const string = "我爱中国";
const encodeString = btoa(encodeURIComponent(string));
const decodeString = decodeURIComponent(atob(encodeString));
console.log(encodeString,"编码");
console.log(decodeString,"解码");
//JUU2JTg4JTkxJUU3JTg4JUIxJUU0JUI4JUFEJUU1JTlCJUJE 编码
//我爱中国 解码
获取当前的url和来源的url
window.location.href
:当前urlwindow.referrer
: 来源url
document.getElelmentById
和document.querySelector
区别
getElementById 获取的是动态集合,querySelecto或querySelectorAll获取的是静态集合。
1 | <ul id="ul"> |
原生获取DOM元素方法
document.getElementById
:通过ID获取document.getElementsByName
: 通过nam属性名document.getElementsByClassName
:通过类名document.getElementsByTagName
:通过标签名document.querySelector
:通过标签名,返回匹配的第一个document.querySelectorAll
:通过标签名,返回集合document.body
: 获取bodydocument.documentElement
:获取HTML
console.log
结果可信吗
- 一般对于基本类型
number、string、boolean、null、undefined
的输出是可信的。但对于Object
等引用类型来说,会有些不一样 - 不展开对象看时,console.log()是按照代码执行顺序,同步地输出了对象当时的快照。所以我们看到的是预期的值。
- 展开对象时,它其实是重新去内存中读取对象的属性值,此时对象属性已被更改,所以展开对象后,可能看到的不是预期值了