質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2760閲覧

IE11で三項条件演算子と判断されたコードについて疑問です

MikiSF

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/08/28 08:28

先日、フラグ判定の方法について質問を投稿した際、色々な書き方ををご提案いただきました。
【js】配列の内容で処理を分岐させたい

その一つが以下です。

javascript

1const operations = { 2 FFFFF() { console.log('[F,F,F,F,F]の処理'); }, 3 FFFFT() { console.log('[F,F,F,F,T]の処理'); }, 4 /* ・・・ */ 5 TFTFT() { console.log('[T,F,T,F,T]の処理'); }, 6 /* ・・・ */ 7 TTTTT() { console.log('[T,T,T,T,T]の処理'); }, 8}; 9 10const sampleAry = ["T","F","T","F","T"]; 11 12operations[sampleAry.join('')]();  // => "[T,F,T,F,T]の処理" と出力される。

今、その時提案いただいたコードをそれぞれ書いたりして勉強中なのですが、上のコードをie11で動かすと

':'がありません。

というエラーが出ます。
FFFFF()の行です。

詳しくエラーの説明を見ると、「三項条件演算子の2番目と3番目のオペランドの間のコロンは省略できない」と書いてあるのですが、
そもそもこれは三項条件演算子なのでしょうか?
配列ではないのでしょうか?

また、ie11でこのエラーを解決するにはどのように処理すればよいのでしょうか?

疑問に思ったので質問させていただきました。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/08/28 09:20

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
MikiSF

2018/08/28 09:30

アドバイスありがとうございます!
guest

回答3

0

これは、ES6で導入された、メソッド定義構文です(MDN)。

下の表にもありますが、もちろんIE11は非対応です。

投稿2018/08/28 09:02

maisumakun

総合スコア146596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MikiSF

2018/08/28 09:30

リンクありがとうございます! 理解できました!
guest

0

ベストアンサー

IE11はES2015の大半のコードが動作しません。
唯一の存在としてletとconstならば動作するといった感じです。
http://kangax.github.io/compat-table/es6/

JavaScript

1const operations = { 2 FFFFF() { console.log('[F,F,F,F,F]の処理'); }, 3 FFFFT() { console.log('[F,F,F,F,T]の処理'); }, 4 /* ・・・ */ 5 TFTFT() { console.log('[T,F,T,F,T]の処理'); }, 6 /* ・・・ */ 7 TTTTT() { console.log('[T,T,T,T,T]の処理'); }, 8};

このコードはJSの仕様書的存在であるES2015で勧告された書き方です。
ブラウザ対応のオブジェクトの書き方で新しく書けるようになった書き方の中から見つけました。
shorthand methods

ES2015はIE11というブラウザの後に登場していますので、もちろんこの書き方には未対応。
何故かIE11はletとconstにのみ対応しており、当時最先端だった可能性はありますが…

ES5で書くなら、普通のオブジェクトを生成する書き方を使いましょう。
(ES5準拠の場合は変数宣言はvar、アロー関数もないのでfunction(){}を利用しています。)

JavaScript

1var operations = { 2 FFFFF: function(){ console.log('[F,F,F,F,F]の処理'); }, 3 FFFFT: function(){ console.log('[F,F,F,F,T]の処理'); }, 4 /* ・・・ */ 5 TFTFT: function(){ console.log('[T,F,T,F,T]の処理'); }, 6 /* ・・・ */ 7 TTTTT: function(){ console.log('[T,T,T,T,T]の処理'); } 8};

投稿2018/08/28 08:47

編集2018/08/28 09:02
miyabi-sun

総合スコア21418

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MikiSF

2018/08/28 08:57

ありがとうございます! つまり、三項条件演算子がどう、というよりは、そもそもIE11が理解できない書き方ということですね。 ブラウザの対応についても毎回チェックするようにします!
guest

0

コードが意図不明です。
おそらく、

JavaScript

1const operations = { 2 FFFFF: function() { console.log('[F,F,F,F,F]の処理'); }, 3 FFFFT: function() { console.log('[F,F,F,F,T]の処理'); }, 4 /* ・・・ */ 5 TFTFT: function() { console.log('[T,F,T,F,T]の処理'); }, 6 /* ・・・ */ 7 TTTTT: function() { console.log('[T,T,T,T,T]の処理'); }, 8};

投稿2018/08/28 08:34

otn

総合スコア86313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi-sun

2018/08/28 08:52 編集

この1行は私も駄目じゃね?と思ったのですが、 前の質問のBAの方が書いて動かしてるんですよね。 なのでES6のクラス構文か分割代入あたりを使った書き方じゃないかと思います。 もしかすると、ES7以降の書き方かも…調べる必要ありそうですね。
MikiSF

2018/08/28 08:58

回答ありがとうございます! 確かに教えていただいた書き方ですと意図した動きになりました。 勉強になります!
miyabi-sun

2018/08/28 09:02

探した所、shorthand methodsというオブジェクトの新しい書き方でした。
otn

2018/08/28 12:53

知りませんでした。 特殊構文と言うことですね。 失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問