ES6语法:let和const

JavaScript技巧:获取变量的值 在JavaScript编程中,有时我们需要获取变量的值以进行进一步的处理或显示。本文将介绍几种常用的方法来获取JavaScript中变量的值,并提供相应的源代码示例。最简单的方法是使用赋值运算符将变量的值赋给另一个变量。根据具体的需求和场景,选择适合的方法来获取变量的值,以便于后续的操作和处理。对于JavaScript对象,可以使用点符号来访问对象的属性。属性可以是对象的内置属性或自定义属性。除了使用点符号,还可以使用方括号来访问对象的属性。如果要获取数组中特定位置的元素值,可以使用索引访问。 阅读详情

1.let

(1)let用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效;var是全局变量,let是局部变量;

例如:

分别用let和var声明了两个变量;然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值;这表明,let声明的变量只在它所在的代码块有效。

{
  let a = 10;
  var b = 1;
}
console.log(b); // 1
console.log(a); // 报错a没有定义:ReferenceError: a is not defined.

(2)for循环的计数器,就很合适使用let命令;

例如:

使用var,最后输出的是10:

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

使用var,最后输出的是6:

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

(3)不存在变量提升;

例如:

var可能会变量提升:

console.log(d) //undefined
var d = 2

let不会变量提升 必须先声明后使用:

console.log(e) //报错:Uncaught ReferenceError: e is not defined
let e = 3

(4)暂时性死区;

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ);

例如:

if (true) {
  // TDZ开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的;

(5)块级作用域;

let实际上为JavaScript新增了块级作用域,在{ }被包围的范围外,不受内层的let变量影响(但会受var的“变量提升”影响);

例如:

function text1(){
  let n = 5; //或var n = 5;
  if (true) {
    let n = 10;
  }
  console.log(n); // 5
}
 
function text2(){
  var n = 5;
  if (true) {
    var n = 10;
  }
  console.log(n); // 10
}
 
function text3(){
  let n = 5;
  if (true) {
    var n = 10; //报错,已经声明了n
  }
}

(6)不允许重复声明;

let不允许在相同作用域内,重复声明同一个变量,不能在函数内部相同模块范围重新声明参数;

例如:

let a = 10;// 即使声明是var a = 10;后面一样报错
let a = 1;// 报错
 
function func(arg) {
  let arg; // 调用时因同范围重名报错
}
 
function func(arg) {
  {
    let arg; // 不报错,因为对上一个arg来看在子模块中
  }
}

2.const命令

(1)const声明一个只读的常量;一旦声明,常量的值就不能改变;通常变量名全部大写;

例如:

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

上面代码表明改变常量的值会报错;

(2)一般用于全局变量;且声明时必须立即初始化,不能留到以后赋值;

例如:

const foo;
// SyntaxError: Missing initializer in const declaration

上面代码表示,对于const来说,只声明不赋值,就会报错;

(3)const的作用域与let命令相同:只在声明所在的块级作用域内有效;

例如:

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined

(4)const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用;

例如:

if (true) {
  console.log(MAX); // ReferenceError
  const MAX = 5;
}

上面代码在常量MAX声明之前就调用,结果报错;

(5)const声明的常量,也与let一样不可重复声明;

例如:

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;

3.变量的解构赋值:

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring);

(1)数组的解构赋值;

a.“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值;

例如:

let [a, b, c] = [1, 2, 3];

b.使用嵌套数组进行解构:

例如:

let a = 1;
let b = 2;
let c = 3;
// 等价于
let [a, b, c] = [1, 2, 3];  // 这种写法属于“模式匹配”
 
let [ , third] = ["foo", "bar", "baz"];
third // "bar"
 
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
 
let [x, y, ...z] = ['a'];
x // "a"
y // 变量解构不成功,赋值为undefined
z // 数组解构不成功,赋值为[]

c.不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功;

例如:

let [x, y] = [1, 2, 3];
x // 1
y // 2

let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4

d.如果等号的右边不是数组(或者严格地说,不是可遍历的结构),将会报错;

例如:

// 报错
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};

e.Set 结构,也可以使用数组的解构赋值;

例如:

let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"

只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值;

(2)对象的解构赋值;

a.对象也可以解构;

例如:

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

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

例如:

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

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

c.对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量;

例如:

// 例一
let { log, sin, cos } = Math;

// 例二
const { log } = console;
log('hello') // hello

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

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'

e.对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者;

例如:

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo;

f.与数组一样,解构也可以用于嵌套结构的对象;

例如:

let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};

let { p: [x, { y }] } = obj;
x // "Hello"
y // "World"

注意,这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样;

let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};

let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

g.对象的解构也可以指定默认值;

var {x = 3} = {};
x // 3

var {x, y = 5} = {x: 1};
x // 1
y // 5

var {x: y = 3} = {};
y // 3

var {x: y = 3} = {x: 5};
y // 5

var { message: msg = 'Something went wrong' } = {};
msg // "Something went wrong"

(3)字符串的解构赋值;

a.字符串被转换成了一个类似数组的对象;

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

(4)数值和布尔值的解构赋值;

a.解构赋值时,如果等号右边是数值和布尔值,则会先转为对象;

例如:

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值;

(5)函数参数的解构赋值;

a.函数的参数也可以使用解构赋值;

例如:

function add([x, y]){
  return x + y;
}

add([1, 2]); // 3

注:本文用于整理知识点和笔记,参考内容来自作者阮一峰《ECMAScript 6 入门》附:https://es6.ruanyifeng.com/#docs/destructuring

机器学习——Anaconda下载安装教程 Anaconda详细下载安装教程 阅读详情

相关推荐

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南

本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。

weixin_29261711的博客 994

ES6声明变量let,在for循环中使用let和使用var声明变量,有什么不同

ES6声明变量let,在for循环中使用let和使用var声明变量,有什么不同。 异步函数不会立即执行,它们会被放入事件队列中,等待执行机会。当异步函数被放入事件队列中后,程序会继续执行后面的代码,直到当前执行栈中的代码全部执行完毕,事件队列中的异步函数才会被取出来执行。

bao_Heng的博客 349

CAB单片机开发指南

CAB单片机开发使用指南,IDE安装及烧录注意事项

Zoebuxiangtian的博客 1558

认识es6中的let

1.声明变量 1.let可以声明多个变量 2.变量不可以重复声明 3.let可以防止变量污染 例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width

weixin_68333400的博客 1338

【汽车ECU标定技术解析】DCM文件与A2L、HEX的协同工作机制

本文深入解析了汽车ECU标定中DCM、A2L与HEX三大核心文件的协同工作机制。A2L文件作为定义标定变量地址与规则的“图纸”,DCM文件承载工程师调试后的具体标定数据,最终通过A2L的地址映射,将DCM数据固化生成可刷入ECU的HEX文件,形成完整的标定数据流转闭环。

weixin_29214559的博客 437

CloudSat卫星数据高效下载与自动化处理指南

本文详细介绍了CloudSat卫星数据的高效下载与自动化处理方法,包括交互式图形界面和wget批量下载技巧,以及使用Python脚本实现自动化处理和数据质量控制。内容涵盖从数据准备到实战应用的完整流程,特别适合气象研究和气候建模领域的工作者提升工作效率。

weixin_28700411的博客 233

ES6

1.let语法 let用来声明变量,它的用法类似于var,但是所声明的变量只在let命令所在的代码块内有效, 基本用法: a.块级作用域 { var a = 10; let b = 20; } console.log(a); console.log(b); 上面代码在代码块中,分别用let和var声明了两个变量,然后在代码块之外调用这两个变量,结果let声明的变量无法被打印,var声明的变量返回...

去土耳其啊 234

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 232

ES6中let命令

let 基本用法 ES6 新增了 let 命令,用来声明变量。它的用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效。 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 for 循环的计数器,就很合适使用 let 命令。 for (let i = 0; i < 10; i++) { // ... } console.log(i); // ReferenceError:

fighting ~的博客 614

tanner2019安装教程

tanner2019安装教程 tanner安装包 软件由老师提供,但由于老师给的方法不知怎么回事无法使用就自己找了一些方法,本教程仅提供参考 链接:https://pan.baidu.com/s/1A2O6JuEF8YFbe8bPnD3J6w 提取码:ysif 复制这段内容后打开百度网盘手机App,操作更方便哦 安装过程 1.选择TannerTools_v2019.2-Win64.exe,进行安装。 2.选择安装产品 3.选择目标路径 4.确认安装 5.安装成功,退出。 获取许可过程 1.打开key压缩

weixin_47730560的博客 1万+

【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆

Qwen3-Embedding:文本嵌入与重排序模型的技术解析与应用实践

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3099

es6常用语法 : let和const

// 声明变量let和const // let 声明的变量不存在预解析 // console.log(flag); // var flag = 123; undefined // let flag = 456; /*ReferenceError: flag is not defined*/ // ------------------------ // let声明的变量不允许...

gufudhn的博客 1139

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 752

ES6新语法:let和const

let 1.基本用法 ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。 for循环的计数器,

m0_46281615的博客 287

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ES6语法篇:let和const

let和var 很简单的例子,let只有在定义的区域内有效,也就是块级作用域,在区域外访问会报错,如下例子: for (let i = 0; i < 10; i++) { // ... } console.log(i); // ReferenceError: i is not defined 而var定义的是全局变量,在全局作用域都有效 var a = []; for (var i ...

www_web_com的博客 202

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

const 和java的语法_ES6语法:var、let、const的区别详解

今天来说说es6的语法,最基础的也就是var,let,const 的用法与区别了,我们来看看他们之间的恩怨情仇。首先来说说var,这个只要是学过js的都知道,它是用来声明一个变量的,但是它在开发中也会遇到一些问题,比较难解决。先来看看下面的代码:var str="hello world";​functiontestVar(){var str="hello";}testVar();console.l...

weixin_36448411的博客 208

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ES6语法: let和const区别

var变量穿透问题 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> &lt

binbinhxx的博客 335

ES6新增语法:使用 let 和 const 关键字声明变量以及 let、const、var三者的区别

1、ES6 简介 1.1 什么是 ES6 ? ES 的全称是 ECMAScript ,它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。 ES6 实际上是一个泛指,泛指 ES2015 及后续的版本。 1.2 为什么使用 ES6 ? 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript 语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性 。 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码。 2、ES6 的新增语法—— let let E

icemwj的博客 618

大前端进阶篇:es6语法中let和const解决了什么问题

每日格言 我自信,故我成功。 mybatis plus 需要的基础: ssm javaweb mysql javaSE 必须会的知识点 为什么学他?mybatis不够嘛? mybatis以及很便捷了,plus肯定会更加的便捷 简介 mybatis简化了jdbc,mybatisplus简化了mybatis 愿景 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自

doomwatcher的博客 440

ES6语法学习阶段一:let和const 变量声明

let 和const命令let命令 用来声明变量,类似于var 。let声明的变量 只在let命令所在的代码块内有效。 在for循环里也是如此 每次循环其实都是一个代码块function fn() { let a = 1; } console.log(a); //undefined //像以前一个经典案例:for循环绑定一个按钮点击事件,最后点击时却报错的情况,可以不用闭包 直接使用le

summershanshan的博客 439

ES6基本语法和知识点:let命令和const命令

ES6简介 1.ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准。JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,为了区分两者,所以将这种语言称为 ECMAScript。ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScr...

SignificantOther 173

es6语法:let和const、模板字符串、箭头函数、单体模式和面向对象

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-...

每天多努力一点 244

webstrom中let和const会报错解决方法

在webstrom中let和const会出现报错的情况是因为webstrom的版本是es5,而let和const是es6语法。当把let或者const改成var的时候就能正常运行代码。 以下提供两种解决方案: 方案一:修改webstrom版本为es6. 方案二:如果修改了webstrom支持es6版本,但是还是报错,那可能是浏览此版本过低,建议升级浏览器或者换一个浏览器测试。 这里扩展一下let,const和var的区别: 1.var和let,const的区别 var为es5的语法,..

weixin_44766680的博客 610

ES6教程

const。

2201_75896691的博客 87
下一篇: mixin混入知识点
Eric_programmer
博客等级 码龄5年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值