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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

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

Q&A

解決済

3回答

2426閲覧

JavaScriptのBooleanオブジェクトのif文での評価について

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

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

0グッド

0クリップ

投稿2019/01/04 03:03

JavaScriptについての質問です
図書館で借りた本にこう書いてあり実行してみたら確かにそうなったのですが
なぜこのような結果になったのか意味が分かりません
なぜBoolean(false)をif()に与えたらtrueになるのでしょうか?

JavaScript

1 2var a = new Boolean(false);//aにfalseを引数としたBooleanオブジェクトを代入する 3var b = new Boolean("false");//bに"false"という文字列を引数としたBooleanオブジェクトを代入する 4document.write(a.toString() + "<BR>"); 5document.write(b.toString() + "<BR>"); 6var c = new Boolean(a);//新しく生成したオブジェクトの引数にオブジェクトを使うと真偽値はtrueになる 7document.write(c.toString() + "<BR>"); 8if(a)document.write(a.toString() + "<BR>");//if文でfalseの値を持つaを評価しているのに実行される

教えてほしいのは一番最後の文です

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

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

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

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

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

m.ts10806

2019/01/04 03:13

console.log()は分かりますか?
guest

回答3

0

aはオブジェクトなので真です。
その前のcのところで確認したばかりです。

参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Boolean

投稿2019/01/04 03:19

otn

総合スコア84704

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

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

0

ベストアンサー

if 文

if 文は内部的に ToBoolean 演算子によって、Boolean 型に変換し、変換値が true なら if に後続する文(Statement)を実行します。

Boolean()

Boolean() は ToBoolean 演算子によって Boolean 型に変換しますが、new 演算子で呼び出されたなら、返り値は Object 型です。

JavaScript

1console.log(typeof Boolean(false)); // "boolean" 2console.log(typeof new Boolean(false)); // "object"

従って、ToBoolean 演算子に new Boolean を引数に与えた評価値は true になります。

JavaScript

1console.log(Boolean(false)); // false 2console.log(Boolean(new Boolean(false))); // true

Re: otuki0191 さん

投稿2019/01/04 06:05

編集2019/01/04 07:53
think49

総合スコア18166

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

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

0

.toString()した上で出力していてはその変数の情報を正しく認識できないので、
console.log()で型なども含めて出力された方が良いです。

js

1var a = new Boolean(false); 2var b = new Boolean("false"); 3var c = new Boolean(a); 4console.log(a); 5console.log(b); 6console.log(c); 7/* 8[Boolean: false] 9[Boolean: true] 10[Boolean: true] 11*/

となります。
これはあくまでBooleanオブジェクトとしてそれぞれの値を持っているだけです。
ifではあくまでその変数自体の真偽を判定するので、
if(a)
↑これは「aという変数自体が存在するか」に近いことを判定しようとしているため、常にtrueです。

「持ってる値」で確認したければ例えば下記

js

1if(a.valueOf()){ 2 console.log("a:true"); 3}else{ 4 console.log("a:false"); 5} 6

投稿2019/01/04 04:19

m.ts10806

総合スコア80854

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問