含泪总结前端面试题之ES6
文章目录
前言
这里是关于ES6的面试题,后面慢慢更新
提示:以下是本篇文章正文内容,下面案例可供参考
1.ES6是什么?
ES6是JS语言的一个标准,就是平常的格式怎么写怎么用。
2.let const
let | const |
---|---|
禁止重复声明 | 禁止重复声明 |
不存在变量提升 | 不存在变量提升 |
暂时性死区 | 暂时性死区 |
声明的变量只在代码块内有效 | 声明一个常量,变量地址不可修改 |
声明后立即赋值,否则会报错 |
const保证不变的值是是地址不变,如果是对象数组里面的数据是可以变的。
就是说 如果
const arr =[],obj={}
arr.push({obj})//这样是可以的
arr = new Array[]就是不可以的 因为这样会改变地址
对象也一样
3.函数默认值
就是
function fun (x,y ='111'){
//这里的y就有一个默认值
}
4.解构赋值
let [x,y,z] = [1,2,3]
let {username,pasword} = {username:"11",pasword:'1111'}
如果右边没有就是undefined
let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined
//上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
5.扩展运算符
功能 | 把数组或者类数组对象展开成一系列用逗号隔开的值 |
---|---|
用途 | 可以进行数组,对象的合并 |
使用方式 | …[1,2,3] |
6.rest运算符
功能 | 就是把这些参数合并成一个数组 |
---|---|
注意 | rest只能是最后一个参数 |
使用方式 | …加很多参数 |
7.模板字符串
外面有反引号 里面大括号包括的数组{AAA}
8.箭头函数
特点 :
- 不绑定this值:是从作用域链的上一层继承this
- 不可以当做构造函数
- 没有arguments类数组(可以用rest参数代替)
应用:是一个匿名函数
()=> aaa 相当于 ()=>{return aaa}
aa=>{} 相当于(aaa)=>{}
()=>{}
//这个例子
var Person = {
'age': 18,
'sayHello': ()=>{
console.log(this.age);
}
};
var age = 20;
Person.sayHello(); // 20
//作用域是在一个函数内部,然后这个箭头函数外面没有函数所以就是全局,所以就是全局的A会输出20 注意作用域都是对于函数所说
9.数组的扩展之一 类数组转换成数组
arguments 不是数组,不继承Array.prototype对象上的属性和方法,但是有length属性,
把类数组转换成数组
Array.prototype.slice.call(arguments)
Array.from() 将类数组变成真正的数组
Array.of() 将一组值变成数组
10.数组的扩展之原型方法
1.find()
查找数组中符合条件的元素,如果有多个符合条件的就返回第一个
let arr = Array.of(1, 2, 3, 4);
console.log(arr.find(item => item > 2)); // 3
2.findIndex()
查找数组中符合条件的元素的下标,如果有多个就返回第一个。
查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。
let arr = Array.of(1, 2, 1, 3); // 参数1:回调函数 // 参数2(可选):指定回调函数中的 this 值
console.log(arr.findIndex(item => item == 2)); // 1
// 数组空位处理为 undefined
console.log([, 1].findIndex(n => true)); //0
3.copyWithin()
将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
// 参数1:被修改的起始索引
// 参数2:被用来覆盖的数据的起始索引
// 参数3(可选):被用来覆盖的数据的结束索引,默认为数组末尾
console.log([1, 2, 3, 4].copyWithin(0,2,4)); // [3, 4, 3, 4]
// 参数1为负数表示倒数
console.log([1, 2, 3, 4].copyWithin(-2, 0)); // [1, 2, 1, 2]
console.log([1, 2, ,4].copyWithin(0, 2, 4)); // [, 4, , 4]
4.fill()
将一定范围索引的数组元素内容填充为单个指定的值。
let arr = Array.of(1, 2, 3, 4); // 参数1:用来填充的值 // 参数2:被填充的起始索引 // 参数3(可选):被填充的结束索引,默认为数组末尾 console.log(arr.fill(0,1,2)); // [1, 0, 3, 4]
5.entries()
遍历键值对。
for(let [key, value] of ['a', 'b'].entries()){
console.log(key, value);
}
// 0 "a"
// 1 "b"
// 不使用 for... of 循环
let entries = ['a', 'b'].entries();
console.log(entries.next().value); // [0, "a"]
console.log(entries.next().value); // [1, "b"]
// 数组含空位
console.log([...[,'a'].entries()]); // [[0, undefined], [1, "a"]]
6.keys()
遍历键名。
for(let key of ['a', 'b'].keys()){ console.log(key);}// 0// 1 // 数组含空位console.log([...[,'a'].keys()]); // [0, 1]
7.values()
遍历键值。
8.includes()
数组是否包含指定值。
9.flat()
嵌套数组转一维数组
console.log([1 ,[2, 3]].flat()); // [1, 2, 3] // 指定转换的嵌套层数
console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]] // 不管嵌套多少层
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5] // 自动跳过空位
console.log([1, [2, , 3]].flat());<p> // [1, 2, 3]
11.对象的扩展
对象简洁表示
//例1
const foo = 'bar';
const baz = { foo };
baz // {foo: "bar"}
// 等同于
const baz = { foo: foo };
//例2
const o = {
method() {
return "Hello!";
}
};
// 等同于
const o = {
method: function () {
return "Hello!";
}
};
//例3
let birth = '2000/01/01';
const Person = {
name: '张三',
//等同于birth: birth
birth,
// 等同于hello: function ()...
hello() {
console.log('我的名字是', this.name);
}
};
属性名
obj.foo = true
obj['a'+'bc'] =123
let propKey = 'foo'
let obj = {
[propKey]:true,
['a'+'bc']:123
}
静态方法
Object.assign(target, source_1, ···)
用于将源对象的所有可枚举属性复制到目标对象中。
let target = {a: 1};
let object2 = {b: 2};
let object3 = {c: 3};
Object.assign(target,object2,object3);
// 第一个参数是目标对象,后面的参数是源对象
target; // {a: 1, b: 2, c: 3
Object.is(value1, value2)
用来比较两个值是否严格相等,与(===)基本类似。
12.symbol
这里就要说到数据类型了
基本数据类型 number string boolean undefined null
引用数据类型就是Object(Array FUnction Date Error)
这个symbol就是一个独一无二的值
var S1 = Symbol()
13.for in遍历
获取键名
14.for of 遍历
获取属性值
15.好多的遍历方法
forEach()用于遍历数组
arr.forEach((item,index)=>{
})
for in
是es5,遍历对象数组把key值遍历出来他会把原型属性遍历出来
可以用hasOwnPropery判断是否是自己的属性
for of
是es6的 用于遍历数组内的元素
Object.keys()
返回一个数组,数组的元素是输入对象的所有键名的集合
16.Set
是一个构造函数,通过new生成Set,没有重复的值
17.Map
类似对象,是键值对的集合,但是键的范围不限于字符串,对象也可以是键