前端学习1 ES6新特性

ES6新特性

1. 变量声明 let/const

let 特性:1. 拥有块级作用域,这意味着在 if 语句、for 循环、while 循环等代码块中声明的 let 变量,只在该代码块内有效。2. 不允许在同一作用域内重复声明同一个变量。 const 特性:1. 也具有块级作用域。2. 声明时必须进行初始化赋值,且赋值后不能再重新赋值修改其值。3. 如果 const 声明的是一个对象或数组,虽然不能重新赋值整个对象或数组,但可以修改对象的属性值或数组的元素值。

2. 箭头函数

箭头函数特性:1. 消除了函数的二义性。2. 简洁的语法。3. 箭头函数不会创建自己的 this 上下文,而是继承外层函数的 this 值。这在处理回调函数和对象方法时非常有用,可以避免 this 指向错误的问题。4. 箭头函数不能使用 new 操作符来创建实例,因为它们没有自己的 prototype 属性。5. 箭头函数没有自己的 arguments 对象,但可以通过剩余参数来获取参数。

let fn = () => {};

3.模板字符串

ES6 中的模板字符串用反引号(`)标识。模板字符串使得字符串的拼接和处理更加方便、灵活和易读,尤其在涉及多行文本和动态内容插入的情况下,可以减少代码的复杂性和冗余度。 模板字符串特性:1. 将变量名写在 ${} 之中,大括号内部可以放入任意的 JavaScript 表达式,包括运算、引用对象属性或调用函数等。

let say = `我是来自${school}的学生, 我的名字叫做${name}。`;

4.解构赋值

ES6 中的解构赋值是一种方便的数据提取和赋值方式,它允许从数组或对象中提取值,并将其赋给变量,还可以用...收集剩余的元素

数组的解构赋值

let [a, b, ...rest] = [7, 8, 9, 10, 11];
 
console.log(a); // 7
 
console.log(b); // 8
 
console.log(rest); // [9, 10, 11]
对象的解构赋值
//其中myName和myAge为别名

let { name: myName, age: myAge } = { name: "Jane", age: 25 };
 
console.log(myName); // Jane
 
console.log(myAge); // 25

5.扩展运算符

ES6 的扩展运算符(...)是一种方便的操作符,它主要有以下功能:

展开数据或对象

console.log(1, ...[2, 3, 4], 5); // 输出:1 2 3 4 5

let obj1 = { foo: "bar", x: 42 };
 
let clonedObj = { ...obj1 };
 
console.log(clonedObj); // 输出:{ foo: "bar", x: 42 }

合并数据或对象

var arr1 = [0, 1, 2];
 
var arr2 = [3, 4, 5];
 
var arr3 = [...arr1, ...arr2];
 
console.log(arr3); // 输出:[0, 1, 2, 3, 4, 5]

还可与解构赋值结合

字符串转字符数组

    const title = "china";
     
    const charts = [...title];
     
    console.log(charts); // 输出:['c', 'h', 'i', 'n', 'a']

6. 剩余参数

ES6 中的剩余参数语法允许将不定数量的参数表示为一个数组。

其语法形式为:在函数的最后一个命名参数前加上三个点(...),后面跟着参数名,例如:function(a, b,...theArgs){ // 函数体 } ,在这个例子中,theArgs 将收集该函数的第三个参数及以后的所有剩余参数。

7. 类

ES6 引入了类(class)的概念,使面向对象编程在 JavaScript 中更加清晰和直观。

8. 模块化

ES6 引入了模块化的概念,这使得 JavaScript 代码的组织和管理更加清晰和高效。 一个模块就是一个独立的 JavaScript 文件。模块内的变量、函数、类等默认是私有的,只有通过 export 关键字导出的部分才能被其他模块使用。

9. promise

详细见下一篇####文章

10. map/set

在 ES6 中,Map 和 Set 是两种新的数据结构,它们为数据的存储和操作提供了更强大和灵活的方式。

Map

Map 是键值对的集合,其中键可以是任何类型的值(包括对象),而不仅仅是字符串。

let myMap = new Map();
 
myMap.set("key1", "value1");
 
myMap.set(2, "value2");
 
myMap.set({ name: "John" }, "value3");

Set

Set 是一种不允许重复值的数据结构。

let mySet = new Set();
 
mySet.add(1);
 
mySet.add(2);
 
mySet.add(2); // 重复添加不会有效果
 
mySet.add("Hello");

11.symbol

在 ES6 中,Symbol 是一种新的基本数据类型,它的主要目的是创建独一无二的值,通常用于对象的属性名,以避免属性名冲突。

12. 迭代器和生成器

在 ES6 中,迭代器(Iterator)和生成器(Generator)为处理数据的遍历和生成提供了更强大和灵活的方式。

迭代器(Iterator)

迭代器是一个具有 next() 方法的对象,每次调用 next() 方法都会返回一个对象,该对象包含两个属性:value (当前迭代的值)和 done (一个布尔值,表示迭代是否完成)。

// 创建一个简单的迭代器
 
function createIterator(arr) {
 
  let index = 0;
 
  return {
 
    next() {
 
      if (index < arr.length) {
 
        return { value: arr[index++], done: false };
 
      } else {
 
        return { value: undefined, done: true };
 
      }
 
    },
 
  };
 
}
 
 
 
let iterator = createIterator([1, 2, 3]);
 
console.log(iterator.next());
 
console.log(iterator.next());
 
console.log(iterator.next());
 
console.log(iterator.next());

生成器(Generator)

生成器是通过 function* 定义的函数,可以通过 yield 表达式暂停和恢复执行,并且可以逐步生成一系列的值。

function* generateNumbers() {
 
  yield 1;
 
  yield 2;
 
  yield 3;
 
}
 
 
 
let generator = generateNumbers();
 
console.log(generator.next());
 
console.log(generator.next());
 
console.log(generator.next());
 
console.log(generator.next());
全部评论

相关推荐

评论
5
5
分享

创作者周榜

更多
牛客网
牛客企业服务