我在babel编译器网站上遇到了这段代码let [a,,b] = [1, 2, 3];
JavaScript,这使我感到好奇。它到底在做什么?我该如何以及在何处以有用的方式使用它?
答案 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
查看更多示例和可能的情况:
答案 2 :(得分:1)
这是一个称为 destructuring 的概念,您可以阅读有关here的更多信息。您要查询的代码仅获取数组的第一项和最后一项,而忽略中间的一项。当您只关心数组中的特定位置时,便可以使用它,而不必担心将其保存到变量中(请参阅上面链接中的 Ignoring some returned values 部分)。