Javascript 对象解构赋值是不是使用 const、let 或 var?

     2023-02-22     273

关键词:

【中文标题】Javascript 对象解构赋值是不是使用 const、let 或 var?【英文标题】:Does a Javascript Object Destructure assignment use const, let, or var?Javascript 对象解构赋值是否使用 const、let 或 var? 【发布时间】:2017-05-07 13:41:20 【问题描述】:

在 ES6/ES2015 中,我可以使用 Object destructuring 从作为函数参数传递的对象中提取字段:

function userId(id) 
  return id;


var user =  
  id: 42, 
;

console.log("userId: " + userId(user)); // "userId: 42"

在上面的例子中,userId 函数中设置的id 变量是否等同于通过varconstlet 设置它?

那么下面哪个是等效函数:

变量

function userId(user) 
    var id = user.id
    return id;

function userId(user) 
    let id = user.id
    return id;

常量

function userId(user) 
    const id = user.id
    return id;

(来自上面链接的 MDN 页面的示例函数,跳转到“从作为函数参数传递的对象中提取字段)

【问题讨论】:

你知道它不是const,因为在函数中你可以为id分配另一个值。 在这种情况下 let 和 var 之间没有有意义的区别,因为函数参数的范围始终是整个函数。 【参考方案1】:

使用解构声明变量使用与在相同位置声明普通变量相同的范围。所以如果你这样做:

let id = id: 42;

那么它是一个let 绑定,如果你这样做:

var id = id: 42;

那么它是一个var 绑定。

函数参数类似于var 绑定,因为它们的作用域是整个函数,而不是const。它们也类似于let 绑定,因为它们的作用域是当前块,即整个函数体。

【讨论】:

"对于在函数顶层块中声明的变量,letvar 之间没有区别":我更喜欢我的措辞。 function x() var a = b; var b = a; 可以; function x() var a = b; let b = a; ReferenceError。它们在函数的顶部是等价的,不一定在函数的顶部 level,因为let 不会提升。 我认为这在功能上是正确的,是的,但是有没有我可以在实现级别上阅读引擎盖下发生的事情的任何地方?我在 MDN 上找不到任何东西。 @komali_2:一切都在ECMAScript specification 中。如果你不习惯的话,阅读起来有点困难。 @komali_2:具体看FunctionDeclarationInstantiation(func, argumentsList)。【参考方案2】:

它将是整个函数范围内的局部变量(就像所有函数参数一样),如您的第一个和第二个示例(它们是等效的:letvar 在顶部时没有区别函数)。

【讨论】:

35.javascript对象和数组的解构赋值基础详解let陷阱函数参数解构(代码片段)

文章目录35.JavaScript对象和数组的解构赋值数组解构解构不改变原数组忽略数组元素可迭代对象使用解构赋值给任何变量与.entries()方法结合与Map结合变量交换多余的元素对象解构属性变量映射默认值多余的属性let陷阱多层解析函... 查看详情

[javascript]解构赋值详解(代码片段)

文章目录概念数组解构声明分别赋值解构默认值交换变量值解构函数返回的数组忽略返回值(或跳过某一项)赋值数组剩余值给一个变量嵌套数组解构字符串解构对象解构基础对象解构赋值给新变量名解构默认值赋值给... 查看详情

javascript学习-15.解构赋值

前言JavaScriptES6新增解构赋值,可以快读从数组或对象中取出成员解构:将对象或者数组中的某个成员取出来赋值:取出来的成员按顺序赋值给变量python里面的解构赋值如果有python语法基础,可以回顾一下python里面的解构赋... 查看详情

es6之解构赋值(代码片段)

何为解构赋值?解构赋值语法是一个Javascript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。如果理解起来感觉抽象,直接看下面例子:数组解构:我们在以前要给变量赋值需要像下面这样写:vararr=[1,2.3];vara=... 查看详情

javascript------解构赋值

解构赋值从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值。什么是解构赋值?我们先看看传统的做法,如何把一个数组的元素分别赋值给几个变量:vararray=[‘hello‘,‘JavaScript‘,‘ES6‘];varx=array[0];vary=array[1];va... 查看详情

你真的了解“对象解构赋值”吗?关于对象解构的全面解析✌

前言大家好,我是 CoderBin。本文将给大家分享JavaScript中,有关对象解构赋值的那些代码技巧,希望能给大家带来帮助,谢谢。如果文中有不对、疑惑的地方,欢迎在评论区留言指正 查看详情

javascript--解构赋值&剩余参数(代码片段)

1.解构ES6中允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构。如果解构不成功,变量的值为undefined(即没有对应的数据给解构的数据赋值)数组解构//数组解构允许我们按照一一对应的关系从数组中提... 查看详情

对象与解构赋值

对象定义:在javascript中,对象就是拥有属性和方法的无需数据集合创建对象:1.object构造函数varperson=newobject();2.字面量方式varperson={};对象的属性:对象属性的分类1.数据属性:一般用于储存数据值2.访问器属性:不包含数据值,... 查看详情

es6数组的解构赋值(下)

...onsole.log(c);//结果:c的值为3   这段例子的代码是不是跟数组的解构赋值很相似,只不过是数组换成了对象。 查看详情

javascript中对象解构详解(代码片段)

1.使用解构从对象中获取值首先,我们定义一个对象,传统上,我们将使用点(.)表示法或下标([])表示法从对象中检索值。constuser=userName:'明天也要努力',city:'南京';constuserName=user.userName;constcity=user[&... 查看详情

变量的解构赋值对象(代码片段)

1.简单赋值2.对象的解构赋值没有特定的顺序,变量必须与属性同名,才能取到正确的值。3.对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。先找到同名属性,即person... 查看详情

es6解构赋值(数组,对象)

参考技术AES6允许从数组中提取值,按照对应位置对变量赋值。对象也可以实现解构。1.数组解构1.对象解构允许我们使用变量的名字匹配对象的属性匹配成功将对象属性的值赋值给变量对象解构起别名 查看详情

ecmascript6新特性之解构赋值

...对其变量进行赋值。称为“解构”。看到上图了吧,解构是不是很简洁。其实解构不单用于数组、对象, 查看详情

es6解构

解构赋值:解构赋值语法是一个Javascript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段。在ES6中添加了可以简化这种任务的新特性:解构... 查看详情

变量的结构赋值(代码片段)

...数组的解构赋值基本用法ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。如果解构不成功,变量的值就等于undefined。等号左边的模式,只匹配一部分的等号右边的数组。这种情况... 查看详情

js对象解构

什么是解构赋值?解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。这种赋值语法极度简洁,同时还比传统的属性访问方法更为清晰。通常来说,你很可能这样访问数组中的前三个元素:varfir... 查看详情

解构赋值默认值

...【发布时间】:2018-08-2009:27:32【问题描述】:我正在学习javascript,但在解构时尝试为变量提供默认值时,我有点卡在ES6语法上。基本上,我正在尝试分配一个变量,将对象属性的值赋予它,如果该值为false/null/undefined,我希望它... 查看详情

使用对象解构赋值时,为啥将属性“名称”转换为字符串? [复制]

】使用对象解构赋值时,为啥将属性“名称”转换为字符串?[复制]【英文标题】:Whenusingobjectdestructuringassignment,whyisaproperty"name"casttostring?[duplicate]使用对象解构赋值时,为什么将属性“名称”转换为字符串?[复制]【发... 查看详情