• ベストアンサー

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

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

#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
質問者

お礼

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

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>if(getId("abc").checked==true){ javascriptは良く言えば柔軟、悪く言えばいい加減な言語なので そう目くじらをたてて===を使うこともないでしょう。 if(getId("abc").checked){ ・・・ } でもいいんじゃない?

takumana20
質問者

お礼

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

回答No.2

言っていることは#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
質問者

補足

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

回答No.1

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

takumana20
質問者

補足

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

関連するQ&A

  • <br>と<br />を統合変換

    テキストの改行変換をジャバスクリプトで、 if(getId("br_1").checked==true){ str = str.replace(/&lt;br&gt;/g, "\n"); } if(getId("br_2").checked==true){ str = str.replace(/(&lt;br \/&gt;)/g, "\n"); } <input type="checkbox" name="br_1" />削除1 <input type="checkbox" name="br_2" />削除2 これで、 <br>と<br />が\n変換されるようになりましたが、 これで書き方は正しいでしょうか? また、 これをラジオボタンで 「なし」「削除1」「削除2」と単一選択にしたいのですが、 どうやればよいのでしょうか?  

  • 大小文字混合させて削除したい

    if(getId("abc").checked==true){ str = str.replace(/AA|BB/g, ""); } 現在、AA,BB は削除できますが、 AA,Aa,aA,BB,Bb,bBの大文字小文字混合でも削除する場合はどうやればよいでしょうか? str = str.replace(/AA|BB/i, ""); にしたら、変な動作になりました。  

  • 改行をカンマ変換、複数ある場合を1個に

    テキストの改行部分をカンマに置き換えています。JavaScript初心者です。 if(getId("br_kanma").checked==true){ str = str.replace(/(\r\n\r\n)|(\n\n)|(\r\n)|(\n)/g, ","); } この場合で、連続改行が続く場合にカンマも増えてしまいます・・・ 改行スペースが多くてもカンマを1個だけにするにはどうしたらよいでしょうか?  

  • ビルダーの構文チェックエラー

    こんばんは。(こんにちは?) ホームページ・ビルダー7の「HTML構文チェック」でエラーが出るのですが、どう直せばいいのか分からずに困っています。 三分割のフレームの境界線に黒色をつけようと思ったのですがビルダーだけではできないみたいだったので、HTMLタグ素材を借りてきてソースに直接挿入しました。 するとソースの <FRAMESET rows="100,*" frameborder="1" framespacing="1" framepadding="1" bordercolor="#000000"> が赤色になりました。 何かおかしいのかなと思ってツールのHTML構文チェックをしてみたところ、 framespacing と framepadding と bordercolor の属性名が未定義です  と出るのです。 ど・どういうことなのでしょうか・・・? ちなみにビルダーのプレビューでも、IEにファイルを開いてブラウザで見てみても、ちゃんと境界線は黒い色に引かれています。 ご指導をよろしくお願い致します。

  • 構文チェックについて

    #!/usr/local/bin/perl $perl = `perl -wc web.cgi`; $perl=~s/[\r\n]/<BR>/g; print <<"END"; Content-type: text/html <HTML> <HEAD><TITLE>PERLCHECK</TITLE></HEAD> <BODY> perl<BR>$perl </BOBY> </HTML> END exit; と以上のように書いてますが。telnet上ではOKと出ますがブラウザでみるとエラーが出ます。 やりたいことは、Telnetを使っての構文チャックではなく、ブラウザ上で構文のチェックは出来ないか模索しています。上記の`UNIXコマンド`の部分で、freeやdf等のコマンドを実行させると実行結果が得られるので、その延長で出来ないかと考えてます。初心者なのですいませんが教えてください。

    • ベストアンサー
    • Perl
  • トークンで分けた文字列をさらにトークンで分ける

    初心者です。よろしければご教授下さい。 temp.c:12: warning: useless keyword or type name in empty declaration というような文字列がg_str02[0]に格納されている時に、まずは「 」(半角スペース)を区切り文字としてトークンごとに分け最初の2つのトークンをmretsu1[0]とmretsu1[1]の中に格納し、さらにmretsu1[0](上記で言う「temp.c:12:」)を「:」を区切り文字としてトークンごとに分けmretsu2[0]とmretsu2[1]に格納するような関数を作りたいのですが、コンパイルは成功するのですが、できた実行ファイルを実行するとエラーが起きて強制終了されてしまいます。 現在ソースは以下のようになっています。 ////////// char mretsu1[255][255]; char mretsu2[2][255]; char *token1 = " "; char *token2 = ":"; strcpy(mretsu1[0], strtok(g_str02[0], token1)); strcpy(mretsu1[1], strtok(NULL, token1)); strcpy(mretsu2[0], strtok(mretsu1[0], token2)); strcpy(mretsu2[1], strtok(NULL, token2)); ////////// デバッグをしてみた所、どうもmretsu1[0]をさらに分解しているところにエラーがあるようです。 よろしくお願いします。

  • Javascriptでラジオボタンとチェックボックスの値を足して計算し

    Javascriptでラジオボタンとチェックボックスの値を足して計算しようとしました。 しかし、チェックボックス同士の値は足されるのですが、ラジオボタンの値は計算されずにそのまま表示されます。 ラジオボタンの値も足されるようにするにはどうしたら良いでしょうか。 よろしくお願いいたします。 javascript↓ function calc2() { var ss=""; var fs= document.forms; for (var f=0 ; f<fs.length ; f++) { //formが複数ある場合、formの数だけ繰り返し d = fs[f].elements; //dにform内のエレメントを代入 checkvalue = 0; //checkvalueの値を0にする。ここをcheckvalue = ""; にすると、文字列として扱われる for (var i = 0; i < d.length; i++ ) { //form内のエレメントの数だけ繰り返し if (d[i].checked == true) { //チェックボックスがチェックされていたら checkvalue += Number(d[i].value); //checkvalueの値(整数の場合)にそれぞれのエレメントの値(value)を追加していく } } ss += checkvalue; function addFigure(str) { //3桁のカンマ挿入 var num = new String(str).replace(/,/g, ""); while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; } var sss = addFigure(ss); //ssの値にカンマを挿入してsssに代入 } document.getElementById('ch_all').innerHTML = "\\" + sss; //html本文内のid="ch_all"の場所に書き出す } html↓ <html> <head> <script type="text/javascript"> </script> <script type='text/javascript' src='test_checked2.js'></script> </head> <body> <div id="ch_all" style="background-color: #eeeeee;">&nbsp;</div> <hr /> <form name="Tform1"> <input type="radio" name="test" value="34500" onclick="calc2()"> \34,500 <input type="radio" name="test" value="15000" onclick="calc2()"> \15,000 <input type="radio" name="test" value="3000" onclick="calc2()"> \3,000 <input type="radio" name="test" value="4444" onclick="calc2()"> \4,444 </form> <form name="Tform2"> <input type="checkbox" name="test2" value="34500" onclick="calc2()"> \34,500 <input type="checkbox" name="test2" value="15000" onclick="calc2()"> \15,000 <input type="checkbox" name="test3" value="3000" onclick="calc2()"> \3,000 <input type="checkbox" name="test4" value="4444" onclick="calc2()"> \4,444 </form> </body> </html>

  • なぜ構文エラーにならないのでしょうか?

    oracle12cで下記のSQLを実行すると13という結果が返ってきます。 しかし、内側のSQLは構文エラーとなります。 Select sum_qty as "13日の金曜日" From ( Select key,Sum(qty) sum_qty From ( Select 'a' key,1 qty from dual union all Select 'a' key,2 qty from dual union all Select 'b' key,10 qty from dual ) ) なぜ13という結果が返ってくるのか理由を知りたいです。

  • 構文がエラーになる

    Exception in thread"main"java.lang.NoClassDefFoundError という文章でエラーになります。 import java.io.*; class Sample34 { public static void main (String args[])throws IOException { System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 1){ System.out.println("1が入力されました。"); } else if(res == 2){ System.out.println("2が入力されました。"); } else{ System.out.println("1か2を入力してください。"); } } }

  • 構文エラー

    PHP Version 4.3.10 windows環境で シフトジスでソース書いています "表" をいれると 構文エラーになってします。 マルチバイトに対応していないせいなのはわかるのですが "表1" みたいになにかうしろに文字をいれると大丈夫のようなので それでしばらく回避して使うことにしたのですが なにか いい回避方法あれば教えてください

    • ベストアンサー
    • PHP

専門家に質問してみよう