プロが教えるわが家の防犯対策術!

http://www.javascriptlint.com/online_lint.php
の構文チェックをしてみたら 全部同じtrueの所が赤字でした。
初心者で良く分からないのですが、動作はできているようです。
何の注意なのでしょうか? (true)で囲めって意味でしょうか?

if(getId("abc").checked==true){
str = str.replace(/AA|BB/gi, "");
}

========================^
lint warning: comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)

A 回答 (4件)

#1です。


比較するときは、「型」をそろえましょう!ということ。
数値型と文字列型を比較したらまずい
if( 1=="1" ) alert("no");
if( ''+1 =="1" ) alert("ok");

同じように、true/falseを返すのはboolean型。

===や!==は、型を含め厳密に比較します。
なので、普段からそういう癖をつけなさいよ!って意味でとらえたら?

自分も含めてですが、ここの回答者でも、使わない人が多いよ!
俺はたまに使うけどね^^;

それから、比較するときは、
var a = "babu";
if( a === "babu" )としないで

if( "babu" === a ) という書き方を心がけています。
もしタイプミスで
if( "babu" = a ) なんてときがあると、文字列に値は代入できないのでミスを発見できる。



というか、過去にも#2様には、「型」でお世話になっているので、納得できるまで
説明があるかもしれません!(と、ふってみる)
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございました。
でも初心者すぎて、どうすれば良いのかまったくわかりませんでしたww
もう少し勉強してみます <(_ _)>

お礼日時:2010/03/08 02:43

>if(getId("abc").checked==true){



javascriptは良く言えば柔軟、悪く言えばいい加減な言語なので
そう目くじらをたてて===を使うこともないでしょう。

if(getId("abc").checked){ ・・・ }

でもいいんじゃない?
    • good
    • 0
この回答へのお礼

そうなのですか・・・
初心者すぎて、何が良いのか判断できませんでしたww
もう少し勉強してみます <(_ _)>

お礼日時:2010/03/08 02:45

言っていることは#1と同じ


===============
ECMAScriptは型に厳密な言語でないです。

ところで、暗黙の型変換、って話があるんです。(コメントも含めて読んでみてね)

http://d.hatena.ne.jp/gallu/20061108/p1
http://www.tokumaru.org/d/20090924.html
http://vb.mvps.org/articles/pt199511.pdf

異なる型で比較するな、型を揃えろ、と。

同じことがECMAScriptにも言えて、
23 <= "023" はどういう比較が行われるんだ?という話がついてまわります。
(いくつかの言語ではこのLintと同じように揃えないとコンパイルエラーになったりします)

さて、おそらくcheckedはbooleanしか返さないのでまぁ、この場合問題はないといえば、ない。
ただ、Lintは、

http://takagi-hiromitsu.jp/diary/20051227.html#p02

>たしかにこれは脆弱性ではない。プログラムの全体を精査すれば、「$row['id']」の値が数値しかとらないことを確認できるだろうし、「$row['postdate']」の値が日付を表す文字列しかとらず、HTTPリクエストの値(CGI入力)に依存していない式だとということも確認できるのだろう。
だが、そのような確認作業をしないと正しいコードかどうかわからないような、プログラムの書き方をすべきでない

って考えで動いて、普段からそういう習慣をつけて書くようにしなさい、と言っています。

#htmlspecialchar嫌いだけどね、俺は。俺はDOM派
============
あんま今回の話には関係ないけど
VB.NETのOption Strict On,Option Explicit On, Option Compare Binary,Option Infer Offあたりなんか調べてみると面白かったりするし、

http://www.ipa.go.jp/security/vuln/websecurity.h …
これの改訂第4版の「根本解決」なんか読んだりするといいかもね

この回答への補足

紹介サイトを拝見しましたが、
初心者すぎて理解できませんでした _/ ̄|○
>if( 1 === true ); else alert("4:実行されなかった");
("4:実行されなかった")って事は ===falseかな?と思いましたが
==true を === true とだけ変更し確認しましたら正常に動作しました。
構文チェックも問題ありませんでした。

しかし、これが正しいのかわかりませんが、
if(getId("abc").checked===true){
これで良いのでしょうか?↑=が3個。 混乱しています。教えてください。

補足日時:2010/02/19 18:43
    • good
    • 0

if( 1 ) alert("1:実行される");


if( true ) alert("2:実行される");
if( 1 == true ) alert("3:実行される");
if( 1 === true ); else alert("4:実行されなかった");

この回答への補足

初心者すぎてすみませんが、正解を教えてください。
>if( 1 === true ); else alert("4:実行されなかった");
("4:実行されなかった")って事は ===falseかな?と思いましたが
==true を === true とだけ変更し確認しましたら正常に動作しました。
構文チェックも問題ありませんでした。

しかし、これが正しいのかわかりませんが、
if(getId("abc").checked===true){
これで良いのでしょうか? 混乱しています。

補足日時:2010/02/19 18:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!