天道酬勤,学无止境

带大括号的 Javascript const 声明(Javascript const declaration with braces)

问题

Electron 的文档(例如 http://electron.atom.io/docs/api/browser-window/)说使用解构语句导入一些功能:

const {BrowserWindow} = require('electron')

这在 Electron 中运行代码时有效,但 Jasmine 和 Visual Studio* 声称“{”是语法错误。

正确的用法是什么?

*代码实际上是用 Typescript 编写的(针对 ES2015 的 1.8),但在这种情况下,JS 中的转译代码是相同的。

回答1

此代码是有效的 ES6/ES2015,但不是有效的 ES5。

node.js >= 6.4 支持解构赋值。 如果您的 Jasmine 使用旧版本运行,它将无法工作。 不确定 Visual Studio,但看起来您需要最新版本的 VS 2015 才能拥有 ES6 功能。

因此,您应该更新您的工具,或者只配置 Typescript 使其面向 ES5。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 带大括号参数的函数式 React 组件(Functional React Component with an argument in curly braces)
    问题 我最近在一个网站上遇到了这段代码 const List = ({ items }) => ( <ul className="list"> {items.map(item => <ListItem item={item} />)} </ul> ); 为什么他们用花括号包裹物品,它是道具吗 回答1 这被称为“解构”。 实际上,您将对象作为参数传递给函数,但解构仅使用对象的命名属性。 const destructuring = ({ used }) => console.log(used); const properties = { unused: 1, used: 2, }; destructuring(properties); // 2 您甚至可以使用它来创建变量。 const properties = { name: 'John Doe', age: 21, }; const { name, age } = properties; console.log(name, age); // John Doe 21 回答2 我是 React 的新手,但我认为是的, items是一个道具,将{items}作为参数传递会解构props对象,因此该函数仅使用道具items ,以简化代码。 这样你就可以在功能组件中使用items而不是props.items 。 例如
  • 在 JSX 中用花括号声明 Const(Declaring Const With Curly Braces in JSX)
    问题 我刚刚开始使用 React Native 并习惯了 JSX 语法。 这就是我要说的吗? 还是我在谈论 TypeScript? 或者…… ES6? 反正... 我见过这个: const { foo } = this.props; 在类函数中。 花括号的用途是什么,使用它们和不使用它们有什么区别? 回答1 它是解构赋值。 解构赋值语法是一个 JavaScript 表达式,可以将数组中的值或对象中的属性解包为不同的变量。 示例(ES6): var person = {firstname: 'john', lastname: 'doe'}; const firstname = person.firstname; const lastname = person.lastname; // same as this const { firstname, lastname } = person; 您可以在 MDN 上找到更多信息 编辑:对于熟悉 Python 语言的开发人员来说,与 Python 解包语法进行比较可能会很有趣。 Python2.7: >>> _tuple = (1, 2, 3) >>> a, b, c = _tuple >>> print(a, b, c) (1, 2, 3) 使用 Python3 的新功能,如 PEP 3132,您还可以执行以下操作: >>> _range
  • 带大括号、方括号和圆括号的任务(Task with braces, brackets and parenthesis)
    问题 任务是检查给定的字符串是否包含{} 、 []和()平衡集。 例如, check("{[}]")必须返回false ,而check("{[]()}")必须返回true等。 解决方案: bool check(const std::string & s) { constexpr auto brackets1 = "()"; constexpr auto brackets2 = "[]"; constexpr auto brackets3 = "{}"; constexpr size_t brackets_pair_size = 2; constexpr auto brackets = "()[]{}"; std::string s2; for (auto & c : s) { if (strchr(brackets, c) != nullptr) { s2 += c; } } auto brackets1_pos{ std::string::npos }; auto brackets2_pos{ std::string::npos }; auto brackets3_pos{ std::string::npos }; while ((brackets1_pos = s2.find(brackets1)) != std::string::npos || (brackets2_pos
  • es6 中 case 后的 switch 语句中的大括号有什么作用?(What do the curly braces do in switch statement after case in es6?)
    问题 有什么区别: switch (expression) { case: somethings; break; } 和 switch (expression) { case: { somethings; break; } } 起初我以为我可以像这样返回一个对象文字,但事实证明这是一个语法错误。 实际上有什么区别? 另一个问题的示例:How to pass switch statement as function argument in Javascript ES6? 回答1 以这种方式使用的花括号建立了自己的块作用域,您可以在其中定义局部let变量或const常量: switch (false) { case true: { let x = "bar"; console.log(x); break; } case false: { let x = "baz"; console.log(x); break; } } 该示例将在没有嵌套块作用域的情况下抛出,因为在 Ecmascript 2015 中,不允许在同一作用域内使用多个具有相同标识符的let / const声明。 请注意, switch语句本身会创建一个块作用域,即无论您是否使用嵌套块作用域, switch let / const声明都不会泄漏到父作用域中。 然而,在switch的上下文中,大括号也用于纯粹的装饰
  • 没有功能或JSON的JavaScript大括号(JavaScript curly braces with no function or json)
    问题 刚打开客户端的javascript文件,第一行内容如下: { var s_account="blog"; } 我不明白。 通常,以我的经验,花括号环绕一个函数... function welcome(){ ... ...或 json JavaScript对象 var attributes = { this : "that... 谁能告诉我为什么在花括号之前或之后没有文本? 它有什么作用/意义何在? 回答1 谁能告诉我为什么在花括号之前或之后没有文本? 它有什么作用/意义何在? 在Javascript中对它们没有任何意义。 它的行为与代码只是 var s_account="blog"; Speculation 在其他具有块作用域的语言中,这可能会限制变量的作用域,但是由于JS不具有该功能(无论好坏),因此没有控件结构或函数的花括号本质上是没有意义的,因此会被忽略。 此代码很可能是从已删除的函数或if语句中遗留下来的。 绝对不是要复制的模式。 回答2 这是一个块,并且完全没有意义,除非您将其标记为: block: { var s_account="blog"; console.log("executed"); break block; console.log("not executed"); } 回答3 在我看来,做这样的事情的唯一合乎逻辑的理由是作为一种组织技术。
  • 无花括号的箭头功能(Arrow function without curly braces)
    问题 我是ES6和React的新手,并且我不断看到箭头功能。 为什么某些箭头函数在粗体箭头之后使用花括号,而某些箭头使用括号? 例如: const foo = (params) => ( <span> <p>Content</p> </span> ); 与 const handleBar = (e) => { e.preventDefault(); dispatch('logout'); }; 回答1 括号返回单个值,花括号执行多行代码。 您的示例看起来很混乱,因为它使用的是JSX,看起来像多个“行”,但实际上只是被编译为一个“元素”。 这里有一些其他例子,它们都做同样的事情: const a = (who) => "hello " + who + "!"; const b = (who) => ( "hello " + who + "!" ); const c = (who) => { return "hello " + who + "!"; }; 您还会经常在对象文字周围看到括号,因为这是避免解析器将其视为代码块的一种方式: const x = () => {} // Does nothing const y = () => ({}) // returns an object 回答2 也可以使用花括号来防止单行箭头函数返回值,或者使下一个开发人员可以明显地看出,在这种情况下
  • javascript if语句的简洁语法不带大括号(Concise syntax for javascript if statements without curly brackets)
    问题 因此,务实地,我对这里要寻找的内容有一个快速而肮脏的答案。 但是,为什么不使用这个好主意呢? 为什么找不到有关它的任何正式文档? 它不是规范和标准的一部分吗? 是否得到广泛支持? 仅仅是因为缩小可能会破坏使用该语法的代码? 如果您可以向我介绍该功能的更全面的文档,我们将不胜感激。 什么定义了if块的内容? 它是基于缩进的吗? 如果是这样,那将很有趣。 另一方面,PHP中的if语句是否有与此语法类似的内容? 我可以保证已经看到它们在这里和那里被使用了,但是我找不到任何可用的示例。 我只是疯了而实际上在PHP中并不存在,还是可以在PHP中使用这些类型的if块? 这样的if块在JS和PHP中是否也支持else ? 似乎既有基于缩进的语法,也有基于单行的语法。 关于以下内容,您能告诉我什么? if(condition) do_some_statement(); 谢谢 回答1 但是,为什么不使用这个好主意呢? 因为很难维护。 为什么找不到有关它的任何正式文档? 它不是规范和标准的一部分吗? 当然可以,请参阅规范中的§12.5-if语句和§12-语句。 if的主体是Statement 。 一种语句是Block (第12.1节),它允许将语句列表视为一个语句,但是还有许多其他类型的语句。 是否得到广泛支持? 普遍。 仅仅是因为缩小可能会破坏使用该语法的代码? 一个好的缩小器不会破坏该语法。
  • 带花括号的Javascript(ES6)const [重复](Javascript (ES6) const with curly braces [duplicate])
    问题 这个问题已经在这里有了答案: 分配左侧的Javascript对象括号表示法({Navigation} =) (4个答案) 5年前关闭。 我是ECMAScript 6的新手,在尝试学习Ember时,偶尔会看到以下代码样式: const { abc, def } = Object; 我搜索了Google和许多解释新的ES6规范的站点。 我知道这不是当前的实现,因为当我输入它时控制台会显示错误。 此代码是什么意思? 更新 我将这段代码粘贴到了Babel的编译器中,这就是它的返回内容: "use strict"; var abc = Object.abc; var def = Object.def; 我仍然对这是要完成的事情感到困惑。 回答1 这是ES2015的销毁任务。 更具体地说,它是对象分解 以更详细的方式重写它可能会有所帮助。 const abc = Object.abc; const def = Object.def; 这是从对象提取属性到变量的一种语法简洁的方法。 // you can rewrite this const name = app.name; const version = app.version; const type = app.type; // as this const { name, version, type } = app
  • 函数参数中变量周围的花括号是什么意思(What do curly braces around a variable in a function parameter mean)
    问题 我在一个包上看到了这个代码: const SortableList = SortableContainer(({items}) => { return ( <ul> {items.map((value, index) => <SortableItem key={`item-${index}`} index={index} value={value} /> )} </ul> ); }); 通过在函数参数中将大括号括起来, items会发生什么? 回答1 这是解构赋值语法。 再举一个例子,下面两行代码是等价的: const { items } = args const items = args.items 简而言之,它是一种访问给定变量的特定字段以在该范围内进一步使用的简化方法。 在您的原始示例中,它声明了一个变量items以在函数体中使用,该函数体是第一个参数的items字段。 const SortableList = SortableContainer(({items}) => { // do stuff with items here 等于 const SortableList = SortableContainer((input) => { const items = input.items // do stuff with items here 回答2
  • React的JSX语法中的双花括号的目的是什么?(What is the purpose of double curly braces in React's JSX syntax?)
    问题 从react.js教程中,我们可以看到双花括号的用法: <span dangerouslySetInnerHTML={{ __html: rawMarkup }} /> 然后在第二个教程“ Thinking in react”中: <span style={{ color: 'red' }}> {this.props.product.name} </span>; 但是,React JSX文档没有描述或提及双花括号。 此语法(双curies)的作用是什么? 还有另一种方法可以在jsx中表达相同的内容,或者这仅仅是文档中的遗漏? 回答1 它只是在prop值中内联的对象文字。 一样 var obj = {__html: rawMarkup}; <span dangerouslySetInnerHTML={obj} /> 回答2 花括号在这里有2种用法:- {..}的计算结果为JSX中的表达式。 {key:value}表示一个javascript对象。 让我们看一个简单的例子。 <Image source={pic} style={{width: 193}}/> 如果您观察到pic被大括号包围。 这就是JSX嵌入变量的方式。 pic可以是任何Javascript表达式/变量/对象。 您也可以执行类似{2 + 3}的操作,它将得出{5} 让我们在这里剖析样式。 {width: 193
  • javascript中的作用域和变量声明提升
    一、变量的作用域 JavaScript的this总是指向一个明确的对象,这个对象是在执行的时候动态绑定的。通俗的说就是谁调用我,我的this就是谁。 除去不常用的with和eval,具体的实际应用中,this的指向分为以下四种情况: 1. ·作为对象的调用; 2. ·作为普通函数的调用; 3. ·构造器的调用; 4. ·Function.propotype.call 和 Functio.propotype.apply 调用; 严格模式下,函数内部的this指向的是underfind,并不会指向window var funF=function(){ alert(this); }; var funStrictF=function(){ 'use strict' alert(this); }; funF();//window funStrictF();//underfind “一个变量的作用域表示这个变量存在的上下文。它指定了你可以访问哪些变量以及你是否有权限访问某个变量。” 变量作用域分为局部作用域和全局作用域。 局部变量(处于函数级别的作用域) 不像其他对面对象的编程语言(比方说C++,Java等等),javascript没有块级作用域(被花括号包围的);当是,javascript有拥有函数级别的作用域,也就是说,在一个函数内定义的变量只能在函数内部访问或者这个函数内部的函数访问
  • 尽可能晚地声明局部变量或在它们所属的最近的花括号处声明? [关闭](Declare local variables as late as possible or at the nearest curly brace they belong? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在努力为我的组织制定一些编程实践标准。 这样做时,我遇到了“此问题的标题”问题 一些人发现最好尽早声明变量,而另一些人发现将它们放在方法的顶部以大括号开头为好。 Oracle Standard还表示要尽早声明它们。 我也赞成在它们所属的最接近的花括号处声明它们。 值得关注的是 代码可读性表现更少的错误倾向 欢迎任何评论。 回答1 这就是麦康奈尔(McConnell)在必读的《代码完成2》中所说的话: 理想情况下,声明并定义每个变量的位置,使其接近使用位置。 声明建立变量的类型。 定义为变量分配一个特定的值。 在支持它的语言(例如C ++和Java)中,应在首次使用变量的地方声明和定义变量。 他还建议使变量尽可能短地保持活动状态,并最小化范围。 对我来说重要的是遵循命名约定(Sun的Java代码约定被广泛使用)。 至于它们最初在哪里声明,出于性能原因,我会尽可能延迟声明(声明您可能不使用的var是一种浪费)。 除非您事先知道肯定要使用它,否则在这种情况下,您可以将其与其他变量组合在一起以提高可读性。 我认为这就是JCC所说的。 回答2
  • var与let区别-详解块级作用域与局部作用域
    1.1-js三种作用域介绍 1.作用域概念(Scope) : 变量可以起作用的范围区域 1.1 ES5 有两种作用域 a.全局作用域(Global Scope) : 函数外面声明的变量,称之为全局变量。 可以在页面任何地方被访问 全局变量生命周期 : 从页面加载 -> 到页面关闭 b.局部作用域(Local Scope) : 函数里面声明的变量,称之为局部变量。 只能在函数里面被访问 局部变量生命周期 : 从函数开始执行 -> 到函数执行结束 1.2 ES6 在ES5原有基础上新增第三种作用域 c.块级作用域(Block Scope) : (1)let/const关键字声明 (2) 大括号里面声明 块级变量声明周期 : 从大括号开始 -> 到大括号结束 1-全局作用域 //1.1 全局作用域 : 在函数外部声明的变量,可以在页面任何地方被访问 var a = 10;//全局变量 let b = 20;//全局变量 function fn() { console.log(a, b);//10,20 }; fn(); console.log(a, b);//10,20 console.log(window.a);//10 console.log(window.b);//undefined 2-局部作用域 //1.2 局部作用域 : 在函数里面声明的变量, 只能在函数内部被访问
  • 前端 —— JavaScript 进阶 24 --ES6 之 const、let
    从今天开始呢就来总结一下 ES6 的语法知识。CMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。 2011 年,ECMAScript 5.1 版发布。之前我们用的也就是ES5 2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。 好啦 !其他的不多说了,有兴趣的伙伴可以自己去查查。我们言归正传。 ES6的运行环境: 浏览器 、node 安装node 进入node.js的官网, 左边是稳定版本,是成熟的版本,右边是先行版本的,还在过度阶段,有可能存在bug。如果是在项目中,建议最好是使用稳定版本,是成熟的版本。win7系统现在最高支持到node-v12,可以在历史版本中找到。直接傻瓜式下一步安装就行了 变量的声明 之前在 ES5 的时候 声明变量的关键字是 var 。在 ES6以后就增加了 let 、const ,可以看做是 var 的升级。 var 1、var用以声明一个变量,并且同时可以在声明语句中初始化所声明的变量。 2、声明的变量,会在代码被执行之前被处理。 3、没有块的概念,可以跨块访问,不能跨函数访问。 4、在函数外、声明的变量,作用域为全局 function
  • vscode自动保存代码,自动按照eslint和standard规范格式化代码设置
    风格的重要性 如果你已经从事编码工作有一段时间了的话,那你肯定会有一种自己喜欢的风格。当你成百上千次以特定的模式编写代码时,你会发现你的编码方式是令人愉悦的。突然间来了个人,开始把挂在行尾的大括号单起一行。你可能会发牢骚。深呼吸冷静思考一下,你放置括号的位置 或 关键字后加空格 不会让你的程序更加正确,这只是个人喜好。 JavaScript 没有官方的编码风格指南 采用 standard 编码风格意味着 代码清晰性和社区约定的重要性要高于个人的编码风格。这不一定适用于所有项目和开发文化,但是开放项目源码对于新手来说可能非常不适应。建立清晰的、自动的编码风格,满足贡献者期望可以使项目发展更健康。 如果你正在为自己编写一个程序,没有其他人需要为你做贡献,那就使用那些让你最快乐的工具和编码风格。当你在一个团队中工作时,你应该尽量减少摩擦,保持专业,不要因为小事而浪费太多的时间。 在介绍自己的风格之前,花点时间学习现有代码库的风格。 JavaScript Standard Style (JavaScript 标准编码风格) 使用两个空格 – 进行缩进字符串使用单引号 – 需要转义的地方除外不再有冗余的变量 – 这是导致 大量 bug 的源头!无分号 – 这里有3篇文章说明不用分号的好处:文章1 文章2 文章3行首不要以 (, [, or ` 开头这是省略分号时唯一会造成问题的地方 –
  • 什么时候应该将花括号用于ES6导入?(When should I use curly braces for ES6 import?)
    问题 似乎很明显,但是我发现自己对于何时使用花括号在ES6中导入单个模块感到有些困惑。 例如,在我正在从事的React-Native项目中,我具有以下文件及其内容: 文件initialState.js var initialState = { todo: { todos: [ {id: 1, task: 'Finish Coding', completed: false}, {id: 2, task: 'Do Laundry', completed: false}, {id: 2, task: 'Shopping Groceries', completed: false}, ] } }; export default initialState; 在TodoReducer.js中,我必须不带花括号将其导入: import initialState from './todoInitialState'; 如果将initialState用花括号括起来,则以下代码行将出现以下错误: 无法读取未定义的属性待办事项 文件TodoReducer.js : export default function todos(state = initialState.todo, action) { // ... } 带有花括号的组件也发生类似的错误。 我想知道何时应该对单个大括号使用大括号,因为显然
  • 搜索和替换不带大括号的 if 语句以包含大括号(Search and replace if statements without braces to include braces)
    问题 我最近一直在使用声纳进行代码分析。 当我进行彻底的违规钻取时,我发现许多带有 if 语句的 java 文件没有大括号(数千个地方)。 是否有一种简单的方法来替换或添加大括号到 if 语句,或者我可以执行哪些步骤来完成此任务,而无需在每个文件中手动执行。 我目前正在使用 intelliJ。 回答1 是否有一种简单的方法来替换或添加大括号到 if 语句,或者我可以执行哪些步骤来完成此任务,而无需在每个文件中手动执行。 我不知道是否有工具可以自动执行此操作。 (可能有......)但假设存在这样的工具,我不相信这将是正确的方法。 退后片刻,考虑为什么代码分析会将此报告为问题。 很多人(比如@pst 和我)认为大括号应该始终存在,即使各种风格指南并不坚持这一点。 这有一个很好的理由......除了“它看起来很丑”。 考虑这些示例代码片段: if (i == 1) i++; doSomething(); while (i < 1) i++; doSomething(); 如果你不仔细阅读,你的眼睛会欺骗你认为doSomething(); 有条件地调用...由于缩进不正确。 它发生了。 (旁白:因为误读代码而给某人贴上“无能”的标签是没有帮助的。如果你拼命地试图修复一个令人窒息的错误并且你已经连续工作了 14 个小时,那么你很可能会错过这种事情. 并不是因为你无能
  • JavaScript 花括号参数作为函数参数 [重复](JavaScript Curly braces argument as function parameter [duplicate])
    问题 这个问题在这里已经有了答案: Javascript 对象字面量:{a, b, c} 到底是什么? (3 个回答) 5年前关闭。 我对 javascript 不是很有经验,并且有一个关于函数参数周围使用的花括号的问题,因为它不是 JSON 结构。 我正在学习核 js,我找到了一些代码作为示例,但我不太明白 - 为什么“产品”在大括号中?: addToCart(product) { reactor.dispatch(ADD_TO_CART, { product }) } 谢谢 回答1 这是创建对象的 ES2015(也称为 ES6)速记。 { product }等价于{ product: product } 。 基本上,您最终会得到一个具有名为"product"的属性的对象,该属性具有product变量的值。 const prop = "prop value"; const obj = { prop, anotherProp: "something else" } console.log("obj: ", obj); 如果您需要更详细的解释,请查看 MDN 文档和此处。 这是一种相对较新的语法,因此旧的浏览器(例如 IE)可能会引发语法错误,但它开始在现代浏览器中得到很好的支持。 在此处查看 ES2015 兼容性表。 回答2 这是用于定义与变量名称具有相同键的对象的 ES6
  • $ {}(美元符号和花括号)在Javascript字符串中是什么意思?(What does ${} (dollar sign and curly braces) mean in a string in Javascript?)
    问题 我在这里或MDN上都没有看到任何内容。 我确定我只是想念一些东西。 在某处必须有一些文档? 从功能上讲,它看起来像允许您将变量嵌套在字符串中,而无需使用+运算符进行串联。 我正在寻找有关此功能的文档。 例子: var string = 'this is a string'; console.log(`Insert a string here: ${string}`); 回答1 您正在谈论模板文字。 它们允许多行字符串和字符串插值。 多行字符串: console.log(`foo bar`); // foo // bar 字符串插值: var foo = 'bar'; console.log(`Let's meet at the ${foo}`); // Let's meet at the bar 回答2 如上面的评论中所述,您可以在模板字符串/文字中包含表达式。 例子: const one = 1; const two = 2; const result = `One add two is ${one + two}`; console.log(result); // output: One add two is 3 回答3 您还可以使用模板文字执行隐式类型转换。 例子: let fruits = ["mango","orange","pineapple","papaya"]
  • ES6 let const 解构赋值 箭头函数 内置扩展方法 Set数据结构
    ES6 定义 ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行时的不可预测性语法过于松散,实现相同的功能,不同的人可能会写出不同的代码 基本语法 let 关键字 1、let关键字就是用来声明变量的 使用let关键字声明的变量具有块级作用域 在一个大括号中 使用let关键字声明的变量才具有块级作用域 var关键字是不具备这个特点的 防止循环变量变成全局变量 2、使用let关键字声明的变量没有变量提升 使用let关键字声明的变量具有暂时性死区特性 /* --------let关键字就是用来声明变量的-------- */ // let a = 10; // console.log(a); /* --------使用let关键字声明的变量具有块级作用域-------- */ // if (true) { // let b = 20; // console.log(b) // if (true) { // let c = 30; // } // console.log(c); // } // console.log(b) /* -------在一个大括号中 使用let关键字声明的变量才具有块级作用域