1.ES6有哪些特性?
答:let of ; map/set ; filter ; forEach ; 解构; 箭头函数 ; Promise ; 模板字符串 ;
generator ; 类的支持 ; const / let。
// let of
const arr = [10, 20, 30, 50];
for (let content of arr) {
console.log(content)
}
// map set
// filter
const arr2 = [10, 20, 30, 40];
const result = arr2.filter(value => value > 20);
console.log(result);
// forEach
const arr3 = [10, 20, 30, 40, 50];
arr3.forEach((value, index, array) => {
console.log(value, index, array);
})
// 解构
const data = { name: 'jone', age: 17, adress: "beijin" };
const { name, age } = data;
console.log(name, age);
// 箭头函数
const f = (value) => {
console.log(value);
}
f(5)
// Promise
// 模板字符串
const value1 = 'beijing';
const value2 = 'shanghai';
const h = `form ${value1} to ${value2}`;
console.log(h);
// generator
// class
// const let
2.apply、call、bind有什么区别?
const obj = {
name: '老王',
age: 19,
myFun: function (from, to) {
console.log(`${this.name}年龄 ${this.age} 来自${from} 去往 ${to}`);
}
}
const db = {
name: '德玛',
age: 99,
}
obj.myFun.call(db, '成都', '上海'); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.apply(db, ['成都', '上海']); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db, '成都', '上海')(); // 德玛 年龄 99 来自 成都去往上海
obj.myFun.bind(db, ['成都', '上海'])(); // 德玛 年龄 99 来自 成都, 上海去往 undefined
3.什么是闭包,闭包有哪些用处?
答:闭包就是作用域范围,因为js是函数作用域,所以函数就是闭包,全局函数的作用域范围就是全局。
闭包举例:防抖、节流、once
- 防抖:周期内有新事件触发,清除旧定时器,重置新定时器
// 防抖
function debounce(fn) {
let timer = null;
return function () {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, arguments);
}, 3000)
}
}
const f = debounce(value => {
console.log(`start ${value}`);
});
setTimeout(() => {
f(1);
}, 1000);
setTimeout(() => {
f(2);
}, 2000);
setTimeout(() => {
f(3);
}, 3000);
// 1 2 3 秒后执行,f() 最后执行结果:start 3 证明防抖成功
- 节流:周期内有新事件触发,直接执行旧事件。
// 节流
function throttle(fn) {
let tag = true;
return function () {
if (!tag) return;
tag = false;
setTimeout(() => {
fn.apply(this, arguments);
tag = true;
}, 3000)
}
}
const f = throttle(value => {
console.log(`start ${value}`);
});
setTimeout(() => {
f(1);
}, 1000);
setTimeout(() => {
f(2);
}, 2000);
setTimeout(() => {
f(3);
}, 3000);
// 执行结果:start 1 证明节流成功
- once:只执行一次
function once(fn) {
let tag = false;
return function () {
if (!tag) {
fn.apply(this, arguments);
tag = true;
}
}
}
const f = once(value=>{
console.log(`支付:${value}$ 成功`);
});
f(5);
f(5);
// 只会执行一次
4.列举数组相关的常用方法?
答:push/pop ; shift/unift ; split/join ; slice/splice/concat ; sort/ reverse ; map/redcuce ; forEach;filter
5.列举字符串相关的常用方法?
答:indexOf;lastIndexOf;charAt;split;match;test;slice;substring;substr;toLowerCase;toUpperCase