【问题标题】:Is this assignment correct? [duplicate]这个作业正确吗? [复制]
【发布时间】:2014-04-06 04:53:03
【问题描述】:

在一些 js 库中我发现了这段代码 sn-p:

var start, end, sel, scrollPos, subst;

[start, end, scrollPos, sel] = getSelection();

Imo 这不是有效的分配,但代码似乎正在运行。你能帮我吗?

编辑:

更长的版本:

...
var start, end, sel, scrollPos, subst;
        if (typeof(document["selection"]) != "undefined") {
            sel = document.selection.createRange().text;
        } else if (typeof(textarea["setSelectionRange"]) != "undefined") {
            [start, end, scrollPos, sel] = getSelection();
        }
...

【问题讨论】:

  • 这只是一个示例,还是您所看到的代码?
  • 这几乎就是我这里所拥有的。它是一些降价工具栏扩展的一部分。
  • 这看起来很像 Python 的变量解包机制。这个想法是列表或元组在变量上线性解包。这通常用于允许函数返回多个值。没听说JS也可以用。
  • 我收到Uncaught ReferenceError: Invalid left-hand side in assignment
  • 这里似乎不起作用:Uncaught ReferenceError: Invalid left-hand side in assignment。需要更多的上下文。可能你看的不是 JS。

标签: javascript


【解决方案1】:

这似乎是一个名为 "Destructuring Assignment" 的 JS 1.7 功能

解构赋值可以使用反映数组和对象字面量构造的语法从数组或对象中提取数据。

对象和数组文字表达式提供了一种创建临时数据包的简单方法。一旦你创建了这些数据包,你就可以以任何你想要的方式使用它们。您甚至可以从函数中返回它们。

使用解构赋值可以做的一件特别有用的事情是在单个语句中读取整个结构,尽管您可以用它们做很多有趣的事情,如以下充满示例的部分所示。

此功能类似于 Perl 和 Python 等语言中的功能。

...页面下方:

您可以使用解构赋值,例如,交换值:

var a = 1;
var b = 3;
[a, b] = [b, a];

就使用该功能而言,它似乎仅受 Mozilla Firefox 支持,这意味着只要您只支持该浏览器,就完全可以使用它。例如,可以编写浏览器插件来利用此功能。

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2021-07-16
    • 2012-04-06
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多