2017-10-29 28 views
0

JavaScriptの3進演算子は、残りのパラメータを受け入れませんか?条件付きでそのような文字列のスライスメソッドに二つの引数のいずれかを渡すために三項演算子を使用しようとして

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

私は「キャッチされないでSyntaxError:予期しないトークンを...」取得

がアイ・アム私の三元の使用&一緒に残りの何かを間違って何をしている?この表現を書く正しい方法はありますか?あるいは、開発者の友人が主張しているように、これは残りのパラメータまたは三項演算子の実装における障害ですか?メソッドの引数で

三項演算子は、残りのパラメータを指定せずに動作します:

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

、残りのパラメータ三項演算子なしで動作します:私はクロームコンソールでこのすべてをやっている

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

。同じ行をarray.sliceで試してみました。

答えて

3

...演算子は、配列リテラルまたは呼び出し式の一部です。スタンドアローンオペレータとしては意味がありません(...aはスタンドアロンとは何ですか?)。

あなたは限り、あなたは実際のパラメータに適用される、任意のメソッド呼び出しにそれを適用することができます。

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

@NinaScholz:彼は配列を渡していないために普及演算子を使っている理由です。 – SLaks

+0

@ NinaScholz:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator – SLaks

+0

私に正しい方法を教えてくれてありがとうございます。しかし、私はまだ理解していません_道。あなたが言うとき...私の表現は> bであると言っているのですか? ... [b、a]:... [a、b]何とかスタンドアローンを返します... [a、b]とは別ですか?私はなぜそれが> bを評価していないのか分からない... [b、a]メソッドへの引数として(私が望むもの) – ckingbailey

関連する問題