computed 和 watch 的区别?
1.computed是计算属性,watch是监听器,用来监听某一个值的变化进而触发相应的回调
2.computed中的函数必须要有return返回、watch没有必须的要求返回return
3.computed是第一次加载就触发一次,watch首次加载不会触发,如果需要首次加载需要设置immediate属性
4.computed中的函数所依赖的属性没有发生变化,那么调用当前的函数的时候会从缓存中获取;而watch在每次监听值发生变化的时候都会执行回调
var let const 区别?
var: 存在变量提升;存在变量覆盖,已经被定义且赋值的变量,如果再次被赋值,则以后一次值为准;没有块级作用域;
const: 定义的是常量,声明之后必须赋值;定义的值不能去修改,否则报错;有块级作用域;不存在变量提升和变量覆盖;对于数组和对象的元素修改,不算做对常量的修改,不会报错。
let: 有块级作用域;不存在变量提升和变量覆盖;let不允许在相同的作用域中重复声明,注意是相同作用域,不同作用域重复声明不会报错
setTimeout 时间为0, 以及误差的原因?
setTimeout,如果时间为0,则会立即插入队列,不是立即执行,等待前面的代码执行完毕。
sort 、splice 实现去重?
先对数组进行排序,再循环,如果相邻的两项相同,则删除一项,i–,再继续对比。
var arr = [1, 2, 3, 2, 4, 1];
arr.sort();
for (var i = 0; i < arr.length; i++) {
if (arr[i] === arr[i+1]) {
arr.splice(i,1);
i--;
}
}
console.log(arr); // [1, 2, 3, 4]
最短的方法,使用new Set([…])?
var arr = [1, 2, 3, 2, 4, 1];
var newArr = new Set(arr);
console.log(newArr); // [1, 2, 3, 4];
箭头函数和普通函数的区别?
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
不可以当作构造函数,也就是说不可以使用new命令,否则会报错
不可以使用arguments对象,该对象在函数体内不存在,如果要用可以使用Rest参数代替
不可以使用yield命令,因此箭头函数不能用作Generator函数
es6新增?
1.新增模版字符串
2.箭头函数
3.增加let、const来声明变量
4.for-of用来遍历数据-例如数组中的值
5.解构赋值
6.新增简单数据类型Symbol,独一无二的,不会与其他属性名冲突
7.将Promise对象纳入规范,提供了原生的Promise对象