【问题标题】:What is the difference between const and const {} in JavaScriptJavaScript 中的 const 和 const {} 有什么区别
【发布时间】:2016-12-09 10:43:50
【问题描述】:

在学习electron的时候,发现了两种获取BrowserWindow对象的方法。

const {BrowserWindow} = require('electron')

const electron = require('electron')
const BrowserWindow = electron.BrowserWindow

JavaScript 中的constconst {} 有什么区别?

我不明白为什么const {} 可以工作。我错过了关于 JS 的任何重要内容吗?

【问题讨论】:

    标签: javascript node.js electron destructuring


    【解决方案1】:

    两段代码是等价的,但第一段使用ES6 destructuring assignment 更短。

    下面是一个简单的例子来说明它是如何工作的:

    const obj = {
      name: "Fred",
      age: 42,
      id: 1
    }
    
    //simple destructuring
    const { name } = obj;
    console.log("name", name);
    
    //assigning multiple variables at one time
    const { age, id } = obj;
    console.log("age", age);
    console.log("id", id);
    
    //using different names for the properties
    const { name: personName } = obj;
    console.log("personName", personName);

    【讨论】:

    • 您的回答很有帮助。我发现 Mozilla 开发者网站很难理解。谢谢。
    【解决方案2】:
    const {BrowserWindow} = require('electron')
    

    以上语法使用 ES6。如果你有一个对象定义为:

    const obj = {
        email: "hello@gmail.com",
        title: "Hello world"
    }
    

    现在,如果我们想分配或使用 obj 的 email 和 title 字段,那么我们不必像

    那样编写整个语法
    const email = obj.email;
    const title = obj.title;
    

    现在是老派了。

    我们可以使用 ES6 Destructuring 赋值,即,如果我们的对象在 obj 对象中包含 20 个字段,那么我们只需编写我们想要使用的字段的名称,如下所示:

    const { email,title } = obj;
    

    这是 ES6 语法更简单的一个 它将自动分配来自obj 的电子邮件和标题,只需在必填字段中正确说明名称。

    【讨论】:

      【解决方案3】:

      这是 ES6 的新特性之一。花括号符号是所谓的destructuring assignment 的一部分。这意味着,您不再需要获取对象本身并在单独的行上为您想要的每个属性分配变量。您可以执行以下操作:

      const obj = {
        prop1: 1,
        prop2: 2
      }
      
      // previously you would need to do something like this:
      const firstProp = obj.prop1;
      const secondProp = obj.prop2;
      console.log(firstProp, secondProp);
      // etc.
      
      // however now you can do this on the same line:
      const {prop1, prop2} = obj;
      console.log(prop1, prop2);

      正如您最终看到的,功能是相同的 - 只是从对象中获取属性。

      解构赋值还有更多内容 - 您可以在 MDN 中查看整个语法:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

      【讨论】:

        【解决方案4】:

        其他答案已经足够好了。我会建议Destructuring assignment的一些有用功能

        首先,我们来看看下面的定义:

        解构赋值语法是一个 JavaScript 表达式 使unpack values from arrays, or properties from objects, into distinct variables成为可能。

        特点:

        1. 解构数组,数组中每一项的索引作为属性(由于数组在JavaScript中是一个对象
        > const {0: first, 1: second} = [10, 20]
        console.log(first);   // 10
        console.log(second);  // 20
        
        
        1. Spread ... 运算符结合
        > {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
        console.log(a); // 10
        console.log(b); // 20
        console.log(rest ); // {c: 30, d: 40}
        
        1. 默认值
        const {a = 10, b = 20} = {a: 1};
        
        console.log(a); // 1
        console.log(b); // 20
        
        1. 分配给新的变量名
        const {p: a, q: b} = {p: 10, q: 20};
        
        console.log(a); // 10
        console.log(b); // 20
        

        【讨论】:

          猜你喜欢
          • 2010-11-11
          • 1970-01-01
          • 2015-05-26
          • 2013-07-12
          相关资源
          最近更新 更多