ES6+
1. ES6 新特性
const
和let
- 模板字符串
- 箭头函数
- 函数的参数默认值
- 对象和数组解构
for...of
和for...in
ES6
中的类Promise
2. Map和Set的区别,Map和Object的区别
Map 和 Set 的区别:
- Map:Map 是一种键值对的集合,其中每个键都是唯一的。你可以通过键来获取对应的值。Map 中的键可以是任意数据类型,包括对象、函数、基本数据类型等。
- Set:Set 是一种值的集合,其中每个值都是唯一的。Set 中不允许重复的值存在,确保集合中的元素是唯一的。
Map 和 Object 的区别:
- Map:Map 是一种更加通用的键值对集合,与 Object 相比,Map 提供了更多的方法和功能。Map 的键可以是任意数据类型,并且会保持插入顺序。另外,Map 的键值对数量可以通过 size 属性轻松获取。
- Object:Object 是 JavaScript 中的内置数据结构,用于存储键值对。在 Object 中,键只能是字符串或 Symbol 类型。Object 适合用来表示简单的键值对,但不如 Map 强大和灵活。
总结来说
Map 和 Set 提供了更多的灵活性和功能,适合处理更复杂的数据结构;而 Object 则更适合处理简单的键值对数据。
3. let 与 var 与 const 的区别
var
声明的变量会挂载在window
上,而let
和const
声明的变量不会var
声明的变量存在变量提升,let
和const
不存在变量提升- 同一作用域下
var
可以声明同名变量,let
和const
不可以 let
和const
声明会形成块级作用域const
一旦声明必须赋值,不能用null
占位,声明后不能再修改,如果声明的是复合类型数据,可以修改属性
如果希望const定义的对象的属性也不能被修改该怎么做
希望对象的属性也不能被修改,可以使用 Object.freeze() 方法来冻结对象。
js
const obj = {
key1: 'value1',
key2: 'value2'
};
Object.freeze(obj);
// 禁止修改已有属性的值
obj.key1 = 'new value'; // 这里的赋值操作不会生效
// 禁止添加新的属性
obj.key3 = 'value3'; // 这个属性添加操作也不会生效
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
使用 Object.freeze() 方法冻结了 obj 对象,使得该对象及其属性都不可被修改。
需要注意的是,Object.freeze() 是浅冻结,意味着它只会冻结对象的直接属性,而不会冻结嵌套对象的属性。如果需要深度冻结整个对象,可以考虑使用一些库或自行编写函数来实现深度冻结。
另外,使用 Object.freeze() 后,对象及其属性将变为只读,无法再进行修改、添加或删除。
4. 箭头函数与普通函数的区别
- 箭头函数是匿名函数,不能作为构造函数
- 箭头函数不能使用
new
, - 箭头函数不能绑定
arguments
,要用rest
参数解决 - 箭头函数没有原型属性
- 箭头函数的
this
永远指向其上下文的this
- 箭头函数不能绑定
this
,会捕获其所在的上下文的this
值,作为自己的this
值