1

私はjavascriptにかなり慣れていませんが、この問題を理解できませんでした。

Chromeからのコードとインスペクターの出力は次のとおりです。

> test?'test':'ok'
"ok"
> [test?'test':'ok']
["ok"]
> ['ok' + test?'test':'ok']
["test"]

この配列で何が起こっているのですか?私が欲しいのは、配列['browser' + isIE?'IE':'不明']。

[isIE?'ブラウザ:IE':'ブラウザ:不明']動作します。しかし、上記の構文の何が問題になっているのかわかりませんか?

4

2 に答える 2

5

次のように書き換えることができます[isIE? 'browser: IE' : 'browser: UNKNOWN']

["browser: " + (isIE ? 'IE' : 'UNKNOWN') ]

条件演算子では常に括弧を使用することをお勧めします。

よくある落とし穴は次bool ? "a" : "b" + "c"のとおり"a"です。"bc""ac"

(bool ? "a" : "b") + "c"意図した機能です。

別の落とし穴:

'ok' + test?'test':'ok'orを与えますが"test"、 or"ok"は決して与えません。これは、ブール値として扱われるためです (これは常に true だと思いますか?)。"oktest""okok"'ok' + test

'ok' + (test ? 'test' : 'ok')意図した機能です。

于 2012-12-18T17:06:39.033 に答える
2

式は次のように評価されます。

('ok' + test) ? 'test' : 'ok';

'ok'との連結を評価し、真であれば戻り、そうでなければtest戻ります。'test''ok'

あなたが望むものは:

'ok' + (test ? 'test' : 'ok');

'ok'三項式の結果と連結します。これは true の場合、'test'そうでない場合です。test'ok'

アップデート

具体例。これにより、必要なものが返されます。

'browser: ' + (isIE? 'IE' : 'UNKNOWN')

配列を表すために式を角かっこで囲んだかどうかはわかりませんでしたが、ここでは省略しました ;-)

于 2012-12-18T17:09:47.043 に答える