【问题标题】:JavaScript ternary operator doesn't accept rest parameters?JavaScript三元运算符不接受其余参数?
【发布时间】:2017-10-29 18:24:13
【问题描述】:

尝试使用三元运算符有条件地将两个参数之一传递给字符串的 slice 方法,如下所示:

var str = "abcdefg";
var a = 1;
var b = 2;
str.slice(a > b ? ...[b, a] : ...[a, b]);

我得到“Uncaught SyntaxError: Unexpected token ...”

我在使用三元运算和休息时做错了什么?有没有写这个表达式的正确方法?或者,正如一位开发者朋友所说,这是在实现其余参数还是三元运算符时出现的错误?

方法参数中的三元运算符在没有剩余参数的情况下工作:

str.slice(a > b ? a : b)

而rest参数在没有三元运算符的情况下也可以工作:

str.slice(...[a, b])

我在 Chrome 控制台中执行所有这些操作。还用 array.slice 尝试了所有相同的行。

【问题讨论】:

    标签: javascript ternary-operator


    【解决方案1】:

    ... 运算符是数组字面量或调用表达式的一部分;作为独立运营商没有任何意义(...a 意味着独立?)。

    你可以将它应用到任何方法调用,只要你实际应用到参数:

    str.slice(...(a > b ? [b, a] : [a, b]));
    

    【讨论】:

    • @NinaScholz:这就是他使用扩展运算符不传递数组的原因。
    • 感谢@SLaks 向我展示了正确的方式,但我仍然不明白为什么就是这样。当您说 ... 没有任何意义时,您是在说我的表达 a > b 吗? ...[b, a] : ...[a, b] 以某种方式返回一个独立的 ... 与 [a, b] 分开?我不明白为什么它不会评估 a > b 然后将 ...[b, a] 作为 arg 传递给方法(这就是我想要的)
    • ...[b, a] 没有任何意义,因为您可以在任何地方编写并作为参数传递(那会是什么?)。 ... 仅适用于方法调用的语法。
    • 好的,我只是在其他情况下使用三元,例如分配给数组,我想我明白了。您是说三元是 ... 的上下文,与方法调用的上下文分开,而 ... 在该上下文中没有意义?那是因为传播只在少数特定情况下才有意义?
    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 2016-01-15
    • 2021-06-18
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多