JavaScript では、1 つのプラス記号に演算子として 3 つの機能があります。文字列の連結を表すことができます。例:
var str = 'こんにちは' '世界!'
または数値の正の値を表す単項演算子。例:
var n = 10;
var n2 = n;
または、数値式の合計演算を表します。例:
var nn2 = n 1;
3 つの表現のうち、文字列の連結と数値の合計はあいまいになりがちです。 JavaScript におけるこれら 2 つの演算の処理はデータ型に依存するため、演算子からは判断できません。式だけを見てみましょう:
コードをコピーします
コードは次のとおりです:
aa = a b; は、その本当の意味が合計なのか文字列の連結なのかを知る方法がありません。これは、JavaScript エンジンがいつ構文解析を実行するかを判断することも不可能です。
プラス記号 " " によって引き起こされる主な問題は、別のルールに関連しています。このルールは、「式に文字列が含まれる場合、文字列の連結が優先される」です。例:
コードをコピー
一部のホストで発生します 問題が発生しました。たとえば、ブラウザでは、DOM モデル内の多くの値は数値のように見えますが、実際には文字列です。したがって、「and」演算を実行しようとすると、「文字列連結」演算になってしまいます。次の例は、この問題を示しています:
コードをコピー
コードは次のとおりです:
ID testPic の IMG 要素には幅 1 の境界線があることがわかります。デフォルトの単位 px (ピクセル、ピクセル ポイント) は省略されています。ただし、次のコードで境界線を広げようとすると、エラーが発生します (一部のブラウザは値を無視し、他のブラウザは例外をポップアップし、一部のブラウザはクラッシュする可能性があります):
コードをコピーします
コードは次のとおりです:
実際、DOM モデルでは、borderWidth は統一された文字列値であるため、ここでの値は「1px」になります。 JavaScript 自体はエラーを起こさず、次のような操作を完了し、その値を borderWidth に割り当てます:
コードをコピー
コードは次のとおりです:
現時点では、ブラウザのDOMモデルは「1px10」の意味を解釈できないため、エラーが発生します。 borderWidth 値を再度読み取ると、値は 1px のままです。では、上記の操作プロセスを証明するにはどうすればよいでしょうか?次のコードは、JavaScript 操作の結果が 1px10 であることを示していますが、borderWidth に割り当てられると、DOM はこの間違った値を無視するため、borderWidth は実際には変更されません:
コードをコピーします
コードは次のとおりです: