1、 说明⼀下 setTimeout 、 Promise 、 Async/Await 的区别
首先、都与异步有关
同步进入主线程、异步进入event table注册函数、指定的事情完成时,eventtable会将事情移入event queue、主线程中同步的任务执行完毕会去队列中执行,这就是***事件轮询***
setTimeout属于宏任务,宏任务还包括整体代码、settimeout、setinterval
promise本身属于宏任务、但是then里面属于微任务、
执行settimeout时候,会将里面的函数放入宏任务,执行
console.log("script start");
let promise1 = new Promise(function(resolve) {
console.log("promise1");
resolve();
console.log("promise1 end");
}).then(function(){
console.log('promise2');
})
执行promise里面的同步代码块、然后遇到resolve加入微任务,再执行resolve下面的,之后跳出,执行到settime加入宏任务,在执行同步,直到同步执行完,在执行微任务,然后时宏任务
setTimeout(function () {
console.log('setTimeout');
}, 0)
console.log('script end');
async function async1(){
console.log('async1 start');
await async2();
console.log('async1 end')
}
async function async2(){
console.log('async2')
}
console.log('script start');
async1();
console.log('script end')
use strict 的用法***
1、严格模式、使js运行时实施更加严格的解析和错误处理方法
- 变量使用之前必须声明,否则会自动创建一个全局变量
- 取消this的强制类型转换、没有严格模式引用null或者未定义的this,会强制转换为全局
- 不允许重复的属性名
- 提高编译效率
js1的全局函数***
- eval()计算字符串格式的表达式的值。或者处理js语句
- encodeURI和decodeURI,编码
- escape对字符串编码,无法解析的特殊字符
- isFinite()是数字返回true,不是返回false
- isNAN()是不是非数字
- Number()i
- parseInt(‘字符串’,进制i)
- parseFloat()
- string
this的用法***
- 一般函数,this指向全局对象
- 箭头函数,this指向上下文的对象
- 如果这个函数是一个对象的内置的方法,里面的this就指向调用的对象
- 如果作为构造函数,指向new出来的对象
- apply或者call会,this会指向传入的对象
object对象的常用方法***
- object.keys()返回自身的属性
- valueOF()返回值
- toString()返回字符串
- hasownProperty()自身的,非继承
- defineproperty(对象,键值对,枚举/修改)
- preventExtension()不可添加新属性
- seal()无法添加,无法删除
- freeze()不可操作
- isfrozen()是否
私有属性怎么实现***
- 闭包形式:
防止用户疯狂点击提交按钮***
- 在事件绑定函数里面添加一个开关属性,初始值为true,点击一次设置为false,然后设置一个定时器,过一段事件设置为true
超时处理**
1、步骤解析:
第一步:将网络请求事件赋值给变量ajaxTimeOut
第二步:通过设置timeout属性值,来定义超时时间
第三步:通过complete中的status是否等于timeout来判断是否超时,并设置超时提示处理
2、具体代码
let ajaxTimeOut = $.ajax({ //将网络请求事件赋值给变量ajaxTimeOut
url: “/api_v1.1/apiPackage/knowKeyWord”,
type: “GET”,
dataType: “json”,
data: {
“knowcontent”: this.state.title + this.state.description,
},
timeout: 2000, //通过timeout属性,设置超时时间,这里指的是毫秒
success: function (data) {
console.log(“获取关键字成功”);
console.log(data);
}.bind(this),
error: function (xhr, status, err) {
}.bind(this),
complete: function (XMLHttpRequest, status) { //当请求完成时调用函数
if (status == ‘timeout’) {//status == 'timeout’意为超时,status的可能取值:success,notmodified,nocontent,error,timeout,abort,parsererror
ajaxTimeOut.abort(); //取消请求
Modal.warning({ //超时提示:网络不稳定
title: ‘友情提示’,
content: ‘网络不稳定’,
});
}
}
});
base64编码和utf-8编码**
-
传输8bit字节编码,表示二进制数据,将二进制数据编码之后放在url传输,
-
使用数字字母+/
-
字符串的长度是4的整数倍
-
使用window.btoa或者window.atob实现ascii和base64转换,
-
utf-8,节省资源,变长编码,从一个字节到6个字节,
// utf8 转为 base64/hex
let output = Buffer.from(‘utf8的字符串’, ‘utf8’)
console.log(output.toString(‘base64’))
console.log(output.toString(‘hex’))
utf-8英文一个,非英文3个,是unicode的进化版本