- ベストアンサー
構文チェックでのエラー?
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 !==)
- みんなの回答 (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様には、「型」でお世話になっているので、納得できるまで 説明があるかもしれません!(と、ふってみる)
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
>if(getId("abc").checked==true){ javascriptは良く言えば柔軟、悪く言えばいい加減な言語なので そう目くじらをたてて===を使うこともないでしょう。 if(getId("abc").checked){ ・・・ } でもいいんじゃない?
お礼
そうなのですか・・・ 初心者すぎて、何が良いのか判断できませんでしたww もう少し勉強してみます <(_ _)>
- himajin100000
- ベストアンサー率54% (1660/3060)
言っていることは#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.html これの改訂第4版の「根本解決」なんか読んだりするといいかもね
補足
紹介サイトを拝見しましたが、 初心者すぎて理解できませんでした _/ ̄|○ >if( 1 === true ); else alert("4:実行されなかった"); ("4:実行されなかった")って事は ===falseかな?と思いましたが ==true を === true とだけ変更し確認しましたら正常に動作しました。 構文チェックも問題ありませんでした。 しかし、これが正しいのかわかりませんが、 if(getId("abc").checked===true){ これで良いのでしょうか?↑=が3個。 混乱しています。教えてください。
- babu_baboo
- ベストアンサー率51% (268/525)
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){ これで良いのでしょうか? 混乱しています。
お礼
詳しい説明ありがとうございました。 でも初心者すぎて、どうすれば良いのかまったくわかりませんでしたww もう少し勉強してみます <(_ _)>