Skip to content

ES6+

1. ES6 新特性

  1. constlet
  2. 模板字符串
  3. 箭头函数
  4. 函数的参数默认值
  5. 对象和数组解构
  6. for...offor...in
  7. ES6中的类
  8. 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上,而letconst声明的变量不会
  • var声明的变量存在变量提升,letconst不存在变量提升
  • 同一作用域下var可以声明同名变量,letconst不可以
  • letconst声明会形成块级作用域
  • const一旦声明必须赋值,不能用null占位,声明后不能再修改,如果声明的是复合类型数据,可以修改属性

如果希望const定义的对象的属性也不能被修改该怎么做

希望对象的属性也不能被修改,可以使用 Object.freeze() 方法来冻结对象。

js
const obj = {
  key1: 'value1',
  key2: 'value2'
};

Object.freeze(obj);

// 禁止修改已有属性的值
obj.key1 = 'new value'; // 这里的赋值操作不会生效

// 禁止添加新的属性
obj.key3 = 'value3'; // 这个属性添加操作也不会生效

使用 Object.freeze() 方法冻结了 obj 对象,使得该对象及其属性都不可被修改。

需要注意的是,Object.freeze() 是浅冻结,意味着它只会冻结对象的直接属性,而不会冻结嵌套对象的属性。如果需要深度冻结整个对象,可以考虑使用一些库或自行编写函数来实现深度冻结。

另外,使用 Object.freeze() 后,对象及其属性将变为只读,无法再进行修改、添加或删除。

4. 箭头函数与普通函数的区别

  • 箭头函数是匿名函数,不能作为构造函数
  • 箭头函数不能使用new,
  • 箭头函数不能绑定arguments,要用rest参数解决
  • 箭头函数没有原型属性
  • 箭头函数的this永远指向其上下文的this
  • 箭头函数不能绑定this,会捕获其所在的上下文的this值,作为自己的this

Released under the MIT License.