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

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

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

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

Q&A

解決済

3回答

22004閲覧

JSで空、null判定

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2016/02/23 03:06

JSで、下記のような記述をすると、if文内に入ってしまうのですが、どうすれば入らないようにできるのでしょうか?
if(!a) のような記述でも入ってきてしまいます。このときの、logの値は、何も表示されませんでした。
また、if(a!="") だけにすると、回避できます。
理由がわからず困っています。
初歩的な質問で申し訳ありませんが、お願いいたします。

var a = ""; if (a!="" || a!=null){ console.log(a); }

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

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

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

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

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

guest

回答3

0

ベストアンサー

!= は型変換してしまうので !== を使います。
それから、null 判定がおかしいですね。null でない場合にマッチしてしまいます。

JavaScript

1var a = ""; 2 3if (a !== "" || a === null) { 4 console.log(a + ' is not a empty string, or it is a null'); 5}

Re: melanocytic さん

投稿2016/02/23 03:16

編集2016/02/23 03:23
think49

総合スコア18166

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

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

退会済みユーザー

退会済みユーザー

2016/02/23 03:24

早速のご回答ありがとうございます。 今回の件で、if(!a)でif内に入ってしまうのも、!==での比較ができていないからなのでしょうか?
think49

2016/02/23 03:33

根本的な原因は a != null にあるので a == null に修正すればよい、という考えも出来なくはありません。 ただし、その場合は型変換が発生するので例えば、Undefined 型でもパスしてしまいます。 var a = undefined; if (a != "" || a == null) { console.log(true); } a != "" がどのように判定されるかまでは調べ切れていませんが、それなりに複雑なので必要であれば下記URLを参照して下さい。 http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison 私としては == の型変換規則を明確に把握して実装するのでなければ、期待しない動作になる事を防ぐ為に === または !== を使用する事を推奨します。
退会済みユーザー

退会済みユーザー

2016/02/23 03:34

今回の件ですと、nullの場合もif内に入らないようにしたいです。 また、基礎的なことが理解できていないのかもしれないのですが、 if (① || ②) としますと、①の判定で条件を満たしていれば、②は判定されないという認識であっているのでしょうか?
think49

2016/02/23 04:10 編集

|| は「または(OR)」の条件演算子です。 A || B ならAが条件成立しなくともBが条件成立すればパスする仕組みです。 今回の場合では「a が空文字ではない、又は a が null ではない場合」なので「全ての場合で成立する条件」となってしまっています。 > if (① || ②) としますと、①の判定で条件を満たしていれば、②は判定されないという認識であっているのでしょうか? そうではありませんが、その条件にしてしまうと「a != ""」が成立した時点で「a != null」が判定されないので a === null の場合に a != "" でパスしてしまいますよ。 (2016/2/23 13:10追記) 上文は嘘でした。ごめんなさい。その認識で合っています。
退会済みユーザー

退会済みユーザー

2016/02/23 03:56

何度もご回答いただき、ありがとうございました。 think49さんの説明に自分なりに他の値をいれてみたところ、理解することができました。 ご迷惑をお掛けしました。 また機会がありましたらよろしくお願い致します。
think49

2016/02/23 04:03

ごめんなさい。読み直したら誤っている事をいっていたので訂正します。 > if (① || ②) としますと、①の判定で条件を満たしていれば、②は判定されないという認識であっているのでしょうか? その認識で合っています。混乱させて申し訳ありません…。
退会済みユーザー

退会済みユーザー

2016/02/23 04:12

ありがとうございます。 今回でかなり良く理解することができました。
guest

0

おちついて考えてください。「aが空白でないか、または、aがnullでないか」は常に成り立つので、aの値が何であってもifの中に入ります。

おそらくは、
「aが空白でなく、かつ、aがnullでもない」にしたかったのでは? ||じゃなくて&&です。

投稿2016/02/23 03:41

otn

総合スコア84712

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

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

退会済みユーザー

退会済みユーザー

2016/02/23 03:53 編集

ご回答ありがとうございます。
退会済みユーザー

退会済みユーザー

2016/02/23 03:57

自分なりに他の値をいれてみたところ、理解することができました。 ありがとうございます。 また機会がありましたら、よろしくお願い致します。
guest

0

ChromeやFirefoxでF12キーを押すと
コンソール画面が立ち上がるのでちょっとしたコードはすぐに試す事が出来ますよ

JavaScript

1"" != "" ? true : false 2// false 3 4"" != null ? true : false 5// true

例えばPHPでは同じ空文字列とnullの判定でも下記のように対話シェルを立ち上げると結果が異なります。
細かい所で言語間の違いがあるので一度確認してみると良いかとおもいます。

PHP

1$ php -a 2php > echo ("" != null ? "true" : "false"); 3// false 4 5php > echo ("" != "" ? "true" : "false"); 6// false

投稿2016/02/23 05:08

miyabi-sun

総合スコア21158

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

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

退会済みユーザー

退会済みユーザー

2016/02/23 05:20

ありがとうございます。 phpとjsで違いがあることは知りませんでした。 また一つ勉強になりました。 またよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問