ES6核心语法

news/2024/7/11 1:00:11 标签: es6, javascript, 前端

主要记录学习ES6的语法

1、let和const

同es5中的var来声明变量。三者的区别分别是:

  1. var声明的变量存在变量提升,先声明未赋值,值为undefined。且变量声明可在函数块内使用。变量声明之后可以重复声明
  2. let声明的变量无变量提升。作用域是块级(例如if或者for等等)。不能被重复声明。声明的变量可以被修改,但是变量的类型不能被改变。
  3. const声明的变量无变量提升。作用域是块级。不能被重复声明。并且声明之后的常量不可以被修改。const还可以声明对象,并且可以修改对象内部的常量。
  4. let和const声明的变量不会污染全局变量。这也是两者相对于var的一个优点。建议在默认情况下用const。在知道变量值要修改时用let。

2、模板字符串

模板字符串是一种字符串字面量。可以在tab键上的反引号 ` 之间插值,变量、函数或其他有效的表达式用${}括起来。

3、函数默认值、剩余参数

①带参数的默认值

javascript">function add(a=10, b=20){
    return a+b;
}
// 默认a=30
console.log(add(30)) // 50

②默认的表达式也可以是一个函数
③剩余参数由…和一个紧跟的具名参数指定,例如…keys。解决了arguments的问题。剩余参数会将函数的所有参数收集到一个数组中,这个数组是一个真正的数组,具有数组的所有特性和方法,此外剩余参数还可以提供更加可靠的类型处理,避免类型错误
arguments的问题包括:arguments是一个类数组对象,不能直接使用数组相关的方法和操作。arguments没有明确的参数类型声明,需要手动进行类型检查。arguments是一个未规范的对象,不同的JavaScript引擎可能会有不同的实现行为。

4、扩展运算符、箭头函数

1、扩展运算符用…表示。

它可以将一个数组或者对象展开,使其成为各自独立的值。在函数调用时,可以使用扩展运算符传递任意数量的参数。
①合并数组

javascript">const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const newArr = [...arr1, ...arr2];
console.log(newArr); // [1, 2, 3, 4, 5, 6]

②复制数组

javascript">const arr = [1, 2, 3];
const newArr = [...arr];
console.log(newArr); // [1, 2, 3]

③获得数组的最大最小值

javascript">const arr = [1, 2, 3, 4, 5];
const maxVal = Math.max(...arr);
const minVal = Math.min(...arr);
console.log(maxVal); // 5
console.log(minVal); // 1

④将字符串转为数组

javascript">const str = "hello";
const arr = [...str];
console.log(arr); // ["h", "e", "l", "l", "o"]

⑤将类数组转换为数组

javascript">const args = function() { return arguments } (1, 2, 3);
const arr = [...args];
console.log(arr); // [1, 2, 3]

⑥合并对象

javascript">const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const newObj = { ...obj1, ...obj2 };
console.log(newObj); // { a: 1, b: 3, c: 4 }

⑦将对象转为数组

javascript">const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const newObj = { ...obj1, ...obj2 };
console.log(newObj); // { a: 1, b: 3, c: 4 }

2、箭头函数(=>)

是一种简洁的函数定义方式,可以用来替代传统的function定义方式。有以下特点:

  • 使用=>来定义函数,相比于function更简洁;
  • 箭头函数可以省略函数体中的花括号和return关键字;
  • 如果箭头函数只有一个参数,可以省略参数周围的括号;
  • 箭头函数的this转向是定义时所在的作用域,而不是调用时所在的作用域。
javascript">// 传统的函数定义方式
function add(a, b) {
  return a + b;
}
// 箭头函数定义方式
const add = (a, b) => a + b;

5、箭头函数this指向和注意事项

箭头函数没有this指向,内部this值只能通过查找作用域来确定,一旦使用箭头函数,不存在作用域链。
注意事项:
①()=>内部没有arguments
②()=>不能使用new关键字实例化对象。function函数也是一个对象,但是()=> 不是一个对象,其实就是一个语法糖

6、解构赋值

解构赋值是对赋值运算符的扩展,针对数组和对象操作

javascript">// 数组的解构赋值
const [a, b, c] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
// 以上都属于不完全解构,不完全解构可以忽略某些属性
// 完全解构
console.log(a,b,c); //1,2,3
javascript">// 对象的解构赋值
const {a, b, c} = {a: 1, b: 2, c: 3};
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

还可以使用默认值避免无法结构的情况:

javascript">const [a = 1, b, c] = [undefined, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

const {a = 1, b, c} = {b: 2, c: 3};
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

解构赋值可以使用剩余用算符,也可以嵌套使用,例如:

javascript">let [a,[b],c] = [1,[2],3]

7、扩展的对象的功能

es6允许直接写入变量和函数,作为对象的属性和方法。其中有两个重要的方法
①is()比较两个值是否严格相等

javascript">console.log(Object.is(NaN, NaN))//true
console.log(Object.is(undefined, null))//false
console.log(Object.is(0, null))//false

②assign()浅拷贝,用于对象的合并

javascript">Object.assign(target, ...sources)//target:目标对象;source:一个或者多个源对象
//例如:
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(target); // { a: 1, b: 4, c: 5 }
console.log(result); // { a: 1, b: 4, c: 5 }

8、Symbol类型

用Symbol声明的值是独一无二存在的,一般用于定义对象的私有属性,取值时用[]取值。例如:

javascript">let s = Symbol('s')
let obj = {}
obj[s] = "hollow"
console.log(obj[s])// hollow

Symbol定义的对象没有key。可以用Reflect.ownkey和Object.getOwnPropertySymbols()方法获取Symbol声明的属性名(作为对象的key)
…持续更新


http://www.niftyadmin.cn/n/4985312.html

相关文章

上海炒股开户哪个证券公司好?找谁能开低佣金的账户?

在上海炒股开户选择哪家券商都可以,但是要拿到低佣金的账户就有点难度了。上海,简称“沪,是国务院批复确定的中国国际经济、金融、贸易、航运、科技创新中心!正是如此,上海地区的券商公司也是非常之多的,这…

ClickOnce 部署中的特定错误

本文介绍了部署 ClickOnce 应用程序时可能出现的常见错误,并提供了解决每个问题的步骤。 一般错误 当您尝试查找应用程序文件时,没有任何反应,或者在 Internet Explorer 中呈现 XML,或者您收到“运行”或“另存为”对话框 出现此…

FPGA原理与结构——时钟IP核原理学习

一、前言 在之前的文章中,我们介绍了FPGA的时钟结构 FPGA原理与结构——时钟资源https://blog.csdn.net/apple_53311083/article/details/132307564?spm1001.2014.3001.5502 在本文中我们将学习xilinx系列的FPGA所提供的时钟IP核,来帮助我们进一…

eslint-plugin-import import/order 规则 说明

eslint-plugin-import import/order 规则 说明 "import/order": ["error",{groups: ["builtin", "external", "internal", "parent", "sibling", "index"],}, ],groups: 指定导入分组的顺序…

Linux之系统操作参数详解

Linux之系统操作参数详解 date //显示当前日期 日期格式化 %Y year年 %y 年份(以00-99来表示) %j 该年中的第几天 %m month月 (01…12) %w 该周的天数,0代表周日,1代表周一 %D 日期(含年月日) %d day of month (e.g., 01) %T 时间(含时分秒&#xff0…

Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式

文章目录 小文件归档 HAR小文件优化 Uber 模式 小文件归档 HAR 小文件归档是指将大量小文件合并成较大的文件,从而减少存储开销、元数据管理的开销以及处理时的任务调度开销。 这里我们通过 Hadoop Archive (HAR) 来进行实现,它是一种归档格式&#xf…

多项式乘法(FFT)

https://www.luogu.com.cn/problem/P3803 傅里叶变换(FFT)笔记存档FFT代码上的实现细节 主函数 把长度设为2的整数次幂块 初始进行翻转(二进制翻转) 对A,B先化为点值(DFT) 相乘 IDFT FFT函数 进行初始翻转&a…

java八股文面试[数据库]——B树和B+树的区别

B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。 1、B树的特性 B树中允许一个结点中包含多个key,可以是3个、4个、5个甚至更多,并不确定,需要看具体的实…