带有两个逗号(,,)的“ let [a ,, b] = [1、2、3、4、5]”是什么,如何使用它?

时间:2019-12-29 20:58:41

标签: javascript

我在babel编译器网站上遇到了这段代码let [a,,b] = [1, 2, 3]; JavaScript,这使我感到好奇。它到底在做什么?我该如何以及在何处以有用的方式使用它?

3 个答案:

答案 0 :(得分:3)

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

这是destructuring assignment的一部分。

双逗号表示应跳过该值(在操作的右侧)。

Ergo,a的值为1,而b的值为3。将不分配任何值2。

答案 1 :(得分:2)

其名称:销毁。 它对于处理对象和数组非常有用。

我将尝试为您提供真实的示例用法:

想象一下您正在使用一个表单,在该表单中您必须通过它传递一些信息,并将其保存在数据库中。

<h1>New Article</h1>

<%= form_with scope: :article, url: articles_path, local: true do |form| %>

<%= if @article.errors.any? %>
    <div id="error_explanation">
        <h2>
            <%= pluralize(@article.errors.count, "error") %>
            prohibited this article from being saved:
        </h2>
        <ul>
            <% @article.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
            <% end %>
        </ul>
    </div>
<% end %>

    <P>
        <%= form.label :title %><br>
        <%= form.text_field :title %>
    </p>

    <p>
        <%= form.label :text %><br>
        <%= form.text_area :text %>
    </p>

    <p>
        <%= form.submit %>
    </p>
<% end %>

<%= link_to 'Back', articles_path %>

您将需要在名为“ formData”的对象中传递此数据:

//Form:

Name: Donald
City: USA
Age: 45

如果需要处理每个对象的元素,则每次都必须编写:

const formData = {name:'donald', city:'USA',age:45} 

通过解构,您可以在变量中重命名此元素:

console.log(formData.name) // => donald
console.log(formData.city) // => USA
console.log(formData.age) // => 45

您正在为每个formData元素分配一个常量变量,以便于编写和读取它:

const {name, city, age} = formData

在您的情况下,逗号之间的元素将被跳过:

console.log(name) // => Donald
console.log(city) // => USA
console.log(age)  // => 45

解构还有另一个功能部分:rest pattern(如@VLAZ所说)

const array = [1,2,3]

const a,,c} = array;
console.log(a) // => 1
// b position will be skipped
console.log(c) // => 3

查看更多示例和可能的情况:

clickHere

答案 2 :(得分:1)

这是一个称为 destructuring 的概念,您可以阅读有关here的更多信息。您要查询的代码仅获取数组的第一项和最后一项,而忽略中间的一项。当您只关心数组中的特定位置时,便可以使用它,而不必担心将其保存到变量中(请参阅上面链接中的 Ignoring some returned values 部分)。