1、ES6中Promise.race的作用及使用场景
将多个Promise实例包装成一个新的Promise实例
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p1成功');
}, 2000)
});
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('p2成功');
})
});
//Promise.race
const prace = Promise.race([p1, p2]);
//Promise.race区别于Promise.all: 只要实例中有一个先改变状态,就会把这个实例的参数的返回值传给prace的回调函数
//使用场景:请求超时
function request() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('请求成功');
}, 2000)
})
};
function timeout() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('网络不佳,请求超时')
}, 3000)
})
};
Promise.race([request(), timeout()]).then((value) => {
console.log(value);
}).catch((reason) => {
console.log(reason);
})
2、JS中如何判断一个对象是空对象
//使用JSON自带的stringify方法判断
let obj = {};
if(JSON.stringify(obj) === "{}") {
console.log("是一个空对象");
};
//使用Object.keys()来判断
let obj1 = {};
Object.keys(obj1);//返回一个数组
if(Object.keys(obj1).length == 0) {
console.log("是一个空对象");
};
3、JS如何判断一个对象是否属于一个类
类本身指向就是构造函数,类的数据类型就是函数
function Person(name) {
this.name = name;
}
let obj = new Person('小飞');
instanceof: 判断构造函数的prototype属性是否出现在对象的原型链的任何位置
let obj1 = {};
console.log(obj instanceof Person);//true
console.log(obj1 instanceof Person);//false
对象属性constructor来判断,指向该对象的构造函数
console.log(obj.__proto__.constructor);
//ƒ Person(name) {
// this.name = name
// }
4、JS中判断数组的方法
通过Object.prototype.toString.call()做判断
console.log(Object.prototype.toString.call([]).slice(8, -1) === 'Array');//true
通过原型链判断 对象的隐式原型等于构造函数的显式原型
console.log([].__proto__ === Array.prototype);//true
通过ES6 Array.isArray()做判断
console.log(Array.isArray([]));//true
通过instanceof做判断
console.log([] instanceof Array);//true
通过Array.prototype.isPrototypeOf做判断,判断Array是否在传入内容的原型链上
console.log(Array.prototype.isPrototypeOf([]));//true
5、JS中清空数组的方法
let arr = [1, 2, 3, 4, 5];
//splice
//第一个参数:规定添加或者删除元素的位置
//第二个参数:要删除元素的数量
arr.splice(0, arr.length);
console.log(arr);
//lenth:数组的长度为0
arr.length = 0;
console.log(arr);
//赋值为[]