表示されているページは、編集用 バージョンの MDN Web Docsです

MDN Web Docs のユーザーとして表示: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

条件 (三項) 演算子は JavaScript では唯一の、3 つのオペランドをとる演算子です。条件に続いて疑問符 (?)、そして条件が真値であった場合に実行する式、コロン (:) が続き、条件がfalsyであった場合に実行する式が最後に来ます。この演算子は、 if 文のショートカットとしてよく用いられます。

構文

condition ? exprIfTrue : exprIfFalse

引数

condition
値が条件として使用される式です。
exprIfTrue
conditiontruthy の値 (true と等しいか、 true に変換できる値) と評価された場合に評価される式です。
exprIfFalse
conditionfalsy の値 (false と等しいか、 false に変換できる値) と評価された場合に評価される式です。

解説

false についていえば、 falsy になる可能性がある式は null, NaN, 0, 空文字列 (""), undefined です。 condition がこのうちの何れかであれば、条件演算子の結果は exprIfFalse の式を実行した結果になります。

単純な例

var age = 26;
var beverage = (age >= 21) ? "ビール" : "ジュース";
console.log(beverage); // "ビール"

null 値の扱い

よくある使い方の一つに、 null になる可能性がある値を扱うというものがあります。

let greeting = person => {
    let name = person ? person.name : `お客さん`
    return `やあ、${name}`
}

console.log(greeting({name: `アリス`}));  // "やあ、アリス"
console.log(greeting(null));             // "やあ、お客さん"

条件の連鎖

三項演算子は右結合で、すなわち以下のような方法で if … else if … else if … else の連鎖と同様に「連鎖」させることができます。

function example(…) {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

// 以下のものと同等です。

function example(…) {
    if (condition1) { return value1; }
    else if (condition2) { return value2; }
    else if (condition3) { return value3; }
    else { return value4; }
}

仕様書

仕様書
ECMAScript (ECMA-262)
Conditional Operator の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Conditional operator (c ? t : f)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応

関連情報

ドキュメントのタグと貢献者

このページの貢献者: mfuji09, mdnwebdocs-bot, yyss, teoli
最終更新者: mfuji09,