ここから本文です

javascriptで(!~)は何を意味しますか?

na_********さん

2009/9/1411:28:00

javascriptで(!~)は何を意味しますか?

if(!i=0)とした場合には「もしi=0でなければ」となることは分かります。

でも何を比べているのか分からないものがあります。
例えば以下のような文です。

var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}

まずフォームを定義して、フォームがtrueかfalseか判断?
どういうことでしょうか?

宜しくお願いします。

閲覧数:
609
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

siiさん

2009/9/1412:03:57

if文の括弧内について、言語によっては取る値がtrue/falseでなくてはなりませんが、JavaScriptではtrue/false以外のモノでも分岐ができます。true/false以外のモノが来ても、内部的に処理されてtrue/falseのいずれかに変換されるようになっています。

if(条件式) {
//(処理A)
} else {
//(処理B)
}

このようなif文があったとき、どのような場合に処理A・Bにそれぞれ流れるかというと、

・Boolean型で、falseのとき。
・undefinedであるとき。
・nullであるとき。
・Number型で、+0、-0、NaNのとき。
・String型で、空文字列のとき。

ちょっと端折っている部分もありますが、条件式の評価の結果が上記のいずれかになる場合、内部的に「false」に変換され、処理Bに流れます。それ以外は(例外はありますが)内部的に「true」に変換され、処理Aです。

今回の例ではtheForm変数が分岐に現れますが、ここではDOMオブジェクトを変数に格納しようとしています。無事格納できたとなると、評価した結果は内部的に「true」に変換されますが、それを ! 演算子で真偽反転して「false」になります。

そのスクリプト断片でやっていることは、(X)HTMLのform要素を取得する場合に、

> document.forms['aspnetForm'];

この書き方ができるかどうかで、できないのであれば、

> document.aspnetForm;

この書き方で再度取得する、というものです。ただ、現在の主流なWebブラウザで前者の書き方ができないということはまず考えられませんので、この分岐処理にはあまり意味が無いように思います。

【参考】
下記の「9.2 ToBoolean」が参考になると思います。この処理を行っています。その前段階でGetValueというのもあるんですが、わかりづらいと思いますので、ここでは読まなくても差し支えありません。

9 型変換 (Type Conversion)
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/9_Type_Conversi...

質問した人からのコメント

2009/9/14 13:06:31

抱きしめる ありがとうございます。
こんな分かりやすくご説明くださって。
書き方が通用しない場合があるということなのですね。
感謝です☆

ベストアンサー以外の回答

1〜1件/1件中

nic********さん

2009/9/1413:01:54

if( theForm )と!なしならば、theFormが存在する時成立する条件になります。
!をつけると意味が反転します。つまり、theFormが存在しない時にifが成立するようになります。

その文は、画面に表示されている中から<form name="aspnetForm">となっているformを選択する文です。documentとは「現在表示中のページ内容」を示す決まり文句です。
1文目と、ifの中は、同じ事を別のやり方でやっています。極めて古いブラウザでは、<form name="aspnetForm">があっても1文目の処理が失敗する事があります(JavaScriptのルールがブラウザによって若干異なるためです)。その場合theFormが空になるので、ifの中のやり方を試しているわけです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる