JavaScript分享ES6相关知识

简介: JavaScript分享ES6相关知识,ES6增加的语法  let&&const  [size=0.9em]let与[size=0.9em]var的区别  let 变量名=变量值  使用let创建变量和使用var创建变量的区别  1、用var声明的变量会变量提升,用let声明的变量不会进行变量提升。

JavaScript分享ES6相关知识,ES6增加的语法
  let&&const
  [size=0.9em]let与[size=0.9em]var的区别

  let 变量名=变量值

  使用let创建变量和使用var创建变量的区别

  1、用var声明的变量会变量提升,用let声明的变量不会进行变量提升。

  用let创建变量

  let xxx=xxx;

  用let创建函数

  let xxx=function(){}

  创建自执行函数

  ;(function(){

  })();

  2、用let定义变量不允许在[size=0.9em]同一个作用域中重复声明一个变量(只要当前作用域中有这个变量,不管是用var还是用let声明的,再用let声明的话会报错:不能重复声明一个变量),但是可以重复定义(赋值)。

  let i=10;

  let i=20;/会报错,

  i=20;重复赋值不会报错

  3、暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可以使用的。

  if (true) {

  // TDZ开始

  tmp = 'abc'; // ReferenceError,报错之后下面都不会输出

  console.log(tmp); // ReferenceError,报错之后下面都不会输出

  let tmp; // TDZ结束

  console.log(tmp); // undefined

  tmp = 123;

  console.log(tmp); // 123

  }

  //下面也会报错出现TDZ

  console.log(typeof x); // ReferenceError

  let x;

  //作为比较如果一个变量根本没有被声明,使用typeof反而不会报错。

  console.log(typeof x);// "undefined"

  4、ES6语法创建的变量(let)存在块级作用域

  [ES5]

  window全局作用域

  函数执行形成的私有作用域

  [ES6]

  除了有ES5中的两个作用域,ES6中新增加块级作用域(我们可以把块级作用域理解为之前学习的私有作用域,存在私有作用域和作用域链的一些机制)[size=0.9em]ES6中把大部分用{}包起来的都称之为块级作用域;

  [size=0.9em]const

  const细节知识点和let类似

  const声明的常量只要声明就必须赋值,而且变量的值是一定的,不能被修改;

  [size=0.9em]注意:并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

  size=1emconst声明的变量也存在暂时性死区,即只能在声明的位置之后使用;

  JS中创建变量的方式汇总

  size=1em[ES5]

  · var :创建变量

  function:创建函数

  ES5中创建变量或者函数:存在变量提升,重复声明等特征;

  size=1em[ES6]

  · let创建变量

  const:ES6中创建常量

  ES6中创建的变量或者常量:都不存在变量提升,也不可以重复声明,而且还存在块级作用域;

  class:创建一个类

  import:导入

  ES6中的解构赋值

  size=1em按照原有值的结构,把原有值中的某一部分内容快速获取到(快速赋值给一个变量)。

  数组的解构赋值

  size=1em解构赋值本身是ES6的语法规范,使用什么关键字来声明这些变量是无所谓的,如果不用关键字来声明,那么就相当于给window添加的自定义属性;(严格模式下必须使用关键字来声明,因为严格模式下不允许出现不用关键字声明的变量;),如果解构不到值,那么变量的值就是undefined;

  let [a,b,c]=[12,23,34];

  var [d,e,f]=[35,41,63];

  console.log(a,b,c)//12,23,34;

  console.log(d,e,f)//35,41,63;

  [q,w,e]=[1,2,3];//相当于给window添加了三个属性:q,w,e值分别为1,2,3;(严格模式下会报错)

  size=1em多维数组的解构赋值,可以让我们快速的获取到需要的结果

  let [a,b,c]=[[45,36],12,[23,43,[1,2[4,[8]]]]23,34];

  console.log(a)//[45,36]

  console.log(b)//12

  console.log(c)//[23,43,[1,2,[4,[8]]]]

  //数组中不需要解构的值可用逗号(,)空开,一个逗号代表空开一项

  let [,,,A]=[12,23,45];

  console.log(A)//undefined

  let [,,B]=[12,23,45]

  console.log(B)//45

  size=1em在解构赋值中,支持扩展运算符即[size=1em]…[size=1em],只要用了扩展运算符,就相当于新生成了一个数组或者对象,如果解构不到值的话,新生成的数组或者对象为空,而不是undefined,但是扩展运算符必须放在末尾

  let [a,...c]=[12,1,4,83,34];

  console.log(a)//12

  console.log(c)//[1,4,83,34];

  let [a,...b,c]=[12,1,4,83,34];//会报错,扩展运算符只能放在末尾;

  对象的解构赋值

  size=1em对象的简洁表示法:

  const foo = 'bar';

  const baz = {foo};

  baz // {foo: "bar"}

  // 等同于

  const baz = {foo: foo};

  size=1em对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

  let { foo, bar } = { foo: "aaa", bar: "bbb" };

  foo // "aaa"

  bar // "bbb"

  如果变量名与属性名不一致,必须写成下面这样。

  let { foo: baz } = { foo: 'aaa', bar: 'bbb' };

  baz // "aaa"

  真正被赋值的是后者,而不是前者。

  let obj = { first: 'hello', last: 'world' };

  let { first: f, last: l } = obj;

  f // 'hello'

  l // 'world'

  first//error: first is not defined

  如果要将一个已经声明的变量用于解构赋值,必须非常小心。

  // 错误的写法

  let x;

  {x} = {x: 1};//会报错

  因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

  // 正确的写法

  let x;

  ({x} = {x: 1});

放在圆括号当中就可以避免 JavaScript 将其解释为代码块。

相关文章
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
183 3
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
287 58
|
10月前
|
JavaScript 前端开发 网络架构
ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南
解构赋值是一个强大且灵活的工具,它使得从数组和对象中提取数据变得更加简单和直观。通过掌握解构赋值的基本语法和实践,你可以写出更加简洁、可读性更强的代码。在实际项目中,解构赋值广泛应用于函数参数处理、变量交换、嵌套结构操作等场景,极大地提升了代码的灵活性和简洁度。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 安全
ECMAScript 6(以下简称 ES6)的出现为 JavaScript 带来了许多新的特性和改进,其中 let 和 const 是两个非常重要的关键字。
ES6 引入了 `let` 和 `const` 关键字,为 JavaScript 的变量管理带来了革新。`let` 提供了块级作用域和暂存死区特性,避免变量污染,增强代码可读性和安全性;`const` 用于声明不可重新赋值的常量,但允许对象和数组的内部修改。两者在循环、函数内部及复杂项目中广泛应用,有助于实现不可变数据结构,提升代码质量。
202 5
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
518 4
|
JSON 前端开发 JavaScript
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
195 1
|
JavaScript 前端开发 Oracle
软件工程师,学习下JavaScript ES6新特性吧
软件工程师,学习下JavaScript ES6新特性吧
151 9