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

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

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

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

Q&A

解決済

2回答

936閲覧

javascript 比較演算子がよく理解できません。。。。

tkm0604

総合スコア555

JavaScript

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

0グッド

0クリップ

投稿2021/08/06 08:03

Vue.jsを学習中なのですが、javascriptの比較演算子の意味がよく分からず、行き詰まっています。。。

下記script

JavaScript

1 computed: { 2 result: function() { 3 let list = items.slice(); 4 if(this.sort.key){ 5 list.sort((a,b)=> { 6 a = a[this.sort.key]; 7 b = b[this.sort.key]; 8 return ( a === b ? 0 : a > b ? 1 : -1) * (this.sort.isAsc ? 1 : -1); 9 }); 10 } 11 return list; 12 } 13 },

のコード内の

javascript

1return ( a === b ? 0 : a > b ? 1 : -1) * (this.sort.isAsc ? 1 : -1);

を言語化した場合、

( a === b ? 0 : a > b ? 1 : -1)の箇所は、
a(左辺) と、b ? 0 : a > b ? 1 : -1(右辺)が一致する場合はtrueを返す。 ということだと思うのですが、b ? 0 : a > b ? 1 : -1(右辺) の意味が全く理解できません。。。。

(this.sort.isAsc ? 1 : -1); も理解できていません。

javascript

1( a === b ? 0 : a > b ? 1 : -1)

javascript

1(this.sort.isAsc ? 1 : -1);

それぞれは何を意味しているのか教えてください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

( a === b ? 0 : a > b ? 1 : -1)の箇所は、

a(左辺) と、b ? 0 : a > b ? 1 : -1(右辺)が一致する場合はtrueを返す。 ということだと思うのですが、

違います。

js

1( ( a === b ) ? 0 : ( ( a > b ) ? 1 : -1 ) ) 2/* 3a === b なら 0 4それ以外で ( a > b ) なら 1 5それ以外なら -1 6*/

【条件 (三項) 演算子 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

【演算子の優先順位 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

投稿2021/08/06 08:08

kei344

総合スコア69606

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

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

tkm0604

2021/08/06 09:57

コメントありがとうございます。 そもそもの理解が間違えていたのですね。 ( ( a === b ) ? 0 : ( ( a > b ) ? 1 : -1 ) ) /* a === b なら 0 それ以外で ( a > b ) なら 1 それ以外なら -1 */ と書いて頂き、理解できました!! ありがとうございました。
guest

0

三項演算子の重ねは一番やっちゃいけない演算子の書き方の一つです

jsの場合「1?2:3?4:5は「1?2:(3?4:5)」と評価され「2」になります
他の言語だと「(1?2:3)?4:5」と評価され「4」が返ることもあるので
三項演算子を重ねるときには明示的にカッコをつける必要があります

投稿2021/08/06 08:32

編集2021/08/06 08:39
yambejp

総合スコア116724

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

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

tkm0604

2021/08/06 09:59

「三項演算子を重ねるときには明示的にカッコをつける必要があります」というのは、 下のkei344さんが書いているように ( ( a === b ) ? 0 : ( ( a > b ) ? 1 : -1 ) )   という事ですよね? 確かに、こう書いてあれば初学者の僕でも理解しやすかったと思います。 他言語の場合結果が変わってくる事もあるという事なので、気をつけます。 ありがとうございました。
yambejp

2021/08/06 10:02

最低限こうしてくださいということです a === b? 0:(a>b?1:-1)
otn

2021/08/06 13:38

> 「三項演算子を重ねるときには明示的にカッコをつける必要があります」というのは、 というのは、PHPの時だけですね。 PHP以外の言語は仕様がちゃんとしているので、if then elseif then elseif then elseif then ~~ の連鎖と一緒で、括弧は不要です。 PHPも勉強するのであれば「PHPの三項演算子の結合優先度は異常」と覚えておきましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問