函数声明和函数表达式区别
- 函数声明会被变量提升到顶部作用域
- 函数表达式只有执行到此处才会赋值,执行必须在表达式之后
- 函数声明必须有函数名
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
btoabase64编码atobbase64解码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()是按照代码执行顺序,同步地输出了对象当时的快照。所以我们看到的是预期的值。
- 展开对象时,它其实是重新去内存中读取对象的属性值,此时对象属性已被更改,所以展开对象后,可能看到的不是预期值了