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

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

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

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

Q&A

解決済

3回答

1530閲覧

Javascript-if({}) { について

yu_ouo

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2017/03/12 14:29

編集2017/03/12 14:36

最近Javascriptの勉強を始めた初心者です。
以下の処理について分からないことがあります。(とある問題にて)

```JavaScript

if({}) {
console.log("true")
} else {
console.log("false")
}

・if({})がif(new Object())ということまでは分かったのですが、 ここでなぜオブジェクトを生成することがtrueになるのかが分かりません。 ・また、なぜif(!null)でもtrueが表示されるのかが分かりません。 ・if(!0)でtrueが表示されるのは型変換され、if(0=falseじゃない)→if(true)になるのでtrueが表示される考え方でよろしいでしょうか。 今までJavaをやってきたのでifの中がboolean型ではない状態に混乱しています。どなたか教えていただけませんか。

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

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

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

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

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

kei344

2017/03/12 14:31

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
yu_ouo

2017/03/12 14:37

ご指摘ありがとうございます。
guest

回答3

0

ToBoolean 演算子

if 文の () 内は ToBoolean 演算子によって Boolean 型に変換される仕組みになっており、下記ページに変換表があります。

ES2016 では ToBoolean 演算子 で true と評価されるのは次の5種類です。

  • Boolean 型 (true のみ)
  • Number 型 (+0, -0, NaN 以外)
  • String 型 (空文字 "" 以外)
  • Symbol 型
  • Object 型

! 演算子

! 演算子は ToBoolean 演算子で Boolean 型に変換後、true, false を反転させます。
http://www.ecma-international.org/ecma-262/7.0/#sec-logical-not-operator

Re: yu_ouo さん

投稿2017/03/12 16:11

編集2017/03/13 03:38
think49

総合スコア18156

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

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

yu_ouo

2017/03/13 13:00

リンクまで貼り付けていただきありがとうございます。
guest

0

論理値への変換は「何故か」といわれてしまうと難しいですが、0 NaN 空文字列 null undefind false 以外が true になる、というような感じでしょうか。

【文法とデータ型 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Grammar_and_types#Data_structures_and_types


追記:

引用先の内容が適切でないため下記リンクを外しました。

【論理値 | JavaScript プログラミング解説】
http://so-zou.jp/web-app/tech/programming/javascript/grammar/data-type/boolean/

投稿2017/03/12 14:52

編集2017/03/12 16:41
kei344

総合スコア69364

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

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

think49

2017/03/12 16:14

> 0 NaN 空文字列 null undefind 以外が true になる 至極当然なので抜けてしまったのだと思いますが、false が抜けてますね…。
kei344

2017/03/12 16:15

指摘ありがとうございます!修正しておきます。
think49

2017/03/12 16:26

http://so-zou.jp/web-app/tech/programming/javascript/grammar/data-type/boolean/ の解説にもやもやします…。 [論理値への変換] -> [変換の基準] において、 - [変換前の型] に [配列], [関数] が入っていて、それらが型の名前であるかのように説明されている - [オブジェクト], [関数], [配列] の [変換後の値] が「nullとundefind 以外」とあって、Object 型の中に null, undefined があるかのように説明されている いろいろと独自解釈があるようで仕様に忠実な解説ではない印象です。
kei344

2017/03/12 16:40

そうですね、リンクを切っておきます。(コメントでも触れているのでURLはそのまま置いておきます)
yu_ouo

2017/03/13 13:03

「論理値への変換」という仕組みがあるのですね、初めて知りました。
guest

0

ベストアンサー

if (条件式)、for (;条件式 ;)、!(条件式) など条件式を書くべき所で、boolean型でないと、boolean型へ(すなわちtrueまたはfalse)へ以下の規則で自動変換されます。
|undefined|→|false|
||||
|null|→|false|
|0|→|false|
|0以外の数|→|true|
|非数(NaN)|→|false|
|0文字の文字列("")|→|false|
|1文字以上の文字列|→|true|
|配列|→|true|
|オブジェクト|→|true|

if({})

オブジェクトだから、trueですね。

if(!null)

if(!null)→if(!false)→if(true) になります。

if(!0)

if(!0)→if(!false)→if(true) ですね。

投稿2017/03/12 15:18

編集2017/03/12 21:39
naomi3

総合スコア1105

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

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

yu_ouo

2017/03/13 13:00

とても分かりやすい回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問