解決済み

構文チェックでのエラー?

  • 困ってます
  • 質問No.5689703
  • 閲覧数163
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 91% (434/473)

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 !==)

質問者が選んだベストアンサー

  • 回答No.3

ベストアンサー率 48% (237/492)

#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様には、「型」でお世話になっているので、納得できるまで
説明があるかもしれません!(と、ふってみる)
お礼コメント
takumana20

お礼率 91% (434/473)

詳しい説明ありがとうございました。
でも初心者すぎて、どうすれば良いのかまったくわかりませんでしたww
もう少し勉強してみます <(_ _)>
投稿日時 - 2010-03-08 02:43:55
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 51% (3827/7415)

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

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

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

でもいいんじゃない?
お礼コメント
takumana20

お礼率 91% (434/473)

そうなのですか・・・
初心者すぎて、何が良いのか判断できませんでしたww
もう少し勉強してみます <(_ _)>
投稿日時 - 2010-03-08 02:45:25
  • 回答No.2

ベストアンサー率 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版の「根本解決」なんか読んだりするといいかもね
補足コメント
takumana20

お礼率 91% (434/473)

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

しかし、これが正しいのかわかりませんが、
if(getId("abc").checked===true){
これで良いのでしょうか?↑=が3個。 混乱しています。教えてください。
投稿日時 - 2010-02-19 18:43:55
  • 回答No.1

ベストアンサー率 48% (237/492)

if( 1 ) alert("1:実行される");
if( true ) alert("2:実行される");
if( 1 == true ) alert("3:実行される");
if( 1 === true ); else alert("4:実行されなかった");
補足コメント
takumana20

お礼率 91% (434/473)

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

しかし、これが正しいのかわかりませんが、
if(getId("abc").checked===true){
これで良いのでしょうか? 混乱しています。
投稿日時 - 2010-02-19 18:42:48
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
このQ&Aのテーマ

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ