質問: 最近NetBeansを導入したのですが、 既に出来上がっているjsファイルにびっしりと黄色のwarningがでてきました。 これは全て「===が予期されましたが==が見つかりました。」というものです。 基本的に 変数==文字列 の部分であれば単純に===として良いのでしょうが、 変数==数値 や 変数=="-1" などのような数字だけの文字列の場合に、 ===に置き換えるのは不安です。 100箇所近くあり、変数の出処もAjaxからの返り値だったりして突き止めるのが 若干面倒なため、ひとまずそっとしておこうかと思うのですが、 私としては ・単純に置き換えてしまうとバグが発生する可能性あり ・forなどで沢山ループさせている中にでも無い限りは、 そっとしておいても気にならないレベルのオーバーヘッドがあるくらいで不具合にはならない と思っているのですが、 間違っていますでしょうか? また、Ajaxでphpから値を受け取っている部分があるのですが、 phpが1を返した場合はjavascript側でも絶対に数値で、 "1"を返した場合は絶対に文字列なのでしょうか?
回答: 型がはっきりしない状況で、「意図して」`==`を使っている分には問題ありません。 問題はオーバーヘッドというより、むしろ「意図しないものが`==`で`true`となってしまう」問題です(PHPに比べればだいぶマシではありますが)。たとえば、`null == undefined`(これは狙って使うことも多いですが)、`1 == true`、`'3.0' == 3`となります。 `val - 0 === 3`や`val + '' === '2'`のように、形を揃えてから`===`比較するのも状況によっては有効です。 Ajaxの返り値は、データの渡し方によって変動します。とりわけPHPをサーバサイドに使っている場合、DBで取った時点で数値が文字列、なんてこともあるので、よく注意しないと型がはっきりしません。