ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript に関する 10 の不可解な点

JavaScript に関する 10 の不可解な点

高洛峰
高洛峰オリジナル
2016-11-26 09:43:15991ブラウズ

JavaScript は世界で最も人気のあるプログラミング言語とみなされますが、実際には、多くの開発者やデザイナーが機能強化のために使用している DOM API が本当の悪夢です。スクリプト言語は今日ますます注目を集めていますが、それでも、JavaScript にはまだ混乱する部分がたくさんあります。
1. Java にちなんで名付けられていますが、Java ではありません
元々は Mocha と呼ばれ、その後 LiveScript に名前が変更され、最終的に JavaScript と呼ばれるようになったという歴史的記録によると、Java の命名は Netscape 間の連携に関連しています。 Sun との交換条件として、Netscape は人気のあるブラウザで Java ランタイムを作成しました。 LiveScript と Java はクライアント側のスクリプトに関しては敵対関係にあるため、この名前はほとんど冗談だったことは言及しておく価値があります。
とにかく、人々が何度も明確にしなければならなかったのは、JavaScript は Java とは何の関係もないということです。
2. Null はオブジェクトですか?
このコードを見てください。オブジェクトが返されます。

これは本当に不可解です。null が null 値を表す場合、どうしてそれがオブジェクトになるのでしょうか?簡単に言えば、これは Microsoft の JScript からも直接借用された JavaScript のオリジナル バージョンのバグです。
3. NaN !== NaN
NaN は数値以外の値を表します。ただし、問題は、NaN がそれ自身でさえも等しくないことです。

これは明らかに間違っています。実際、値が実際に NaN であることを確認したい場合は、isNaN() 関数を使用する必要があります。
4. グローバル変数
グローバル変数への依存は常に JavaScript の最悪の部分とみなされてきました (ECMA の JavaScript 5 ではグローバル変数が削除されました。ECMA が JavaScript 5 を開始 - 翻訳者のメモを参照してください)。単純なページの場合は問題ありませんが、複雑なページの場合、多数の JavaScript スクリプトが含まれている場合、複数のグローバル変数が誤って同じ名前になった場合、特定のグローバル変数がどこで宣言されているかを知ることが困難になります。エラーが発生します。
5. すべて Mozilla ユーザー エージェントとして検出されるブラウザ
は、実際には、これは JavaScript のせいではなく、各ブラウザの意図によるものであることを認めなければなりません。たとえば、JavaScript を使用して Safari を検出したときに得られる結果は次のとおりです:

最初の単語 Mozilla/5.0 に気づきましたか? Safari はこの問題を修正しましたが、その理由はまだ説明できません。それが開発者を誤解させる方法です。実際、ほとんどのブラウザがユーザー エージェントを Mozilla に設定していることがわかります。これは 10 年前に遡ります。
ユーザー エージェントは、現在のブラウザを識別するために使用される文字列です。世界初のブラウザである Mosaic は、かつて次のようにマークしていました。

これは非常に合理的であるため、Netscape が登場したとき、暗号化方式セクションは Mosaic の伝統を保持していました。も最後に追加しました。

IE3 がリリースされるまではすべて問題ありませんでしたが、IE3 がリリースされた当時、Netscape は、Netscape を認識するためにクライアント検出メカニズムを導入していました。物議を醸したが、当時は何もなかった。 IE が最初にユーザー エージェント ロゴを起動したとき、それは次のように見えました:


これにより、IE は非常に消極的になりました。Netscape は多くのサーバーで認識されていたため、開発者は単に IE が Mozilla と間違われることを望み、その後、もう一度追加します。個別の IE タグ。

現在、ほぼすべてのブラウザーが IE の足跡をたどり、自らを Mozilla として認識していますが、これはおそらく連鎖反応です。
6. 一貫性のない関数スコープ
次のコードを参照してください:

foo(bar.method) 異なる戻り結果の理由は、メソッド関数が bar の下のオブジェクトではなく Windows オブジェクトとして呼び出されるためです。これを修正するには、渡された匿名関数から bar.method() を呼び出す必要があります。
7. ビット演算子
JavaScript と Java には、ビット演算など多くの共通点があります。
• & - および
• | - or
• ~ - not
• >> - 符号なし右シフト
• 最初の & 演算子に注目すると、JavaScript は Java とは異なり、整数を持たず、前後に変換する必要があるため、変換操作に時間がかかります。
8. null 値の種類が多すぎる
null、false、unknown などの値はほぼ同じ意味を持ち、それらの違いが混乱を招きます。
9. 算術演算の問題
JavaScript には多くの算術演算が含まれていますが、次の計算を実行すると、「.2+.4」は「.6」になるはずです。しかし、戻り値は確かに「0.600000000000001」になります。 。 JavaScript による 10 進数の計算へのアクセスには、いくつかの小さな問題があります。

なぜこれが起こっているのですか?簡単に言えば、JavaScript はバイナリ浮動小数点演算に IEEE 標準を使用しているため、整数の計算には問題ありません。

10. 不可解なコードエラー
次の 2 つのコードを見てください:

JavaScript に関する 10 の不可解な点

これらは同じであるはずですが、{ の位置が異なるだけです。ただし、次のコードを見てみましょう。

JavaScript に関する 10 の不可解な点

JavaScript に関する 10 の不可解な点

に置き換えると、エラーが発生します。これは、JavaScript には、間違っていると思われるコードを修正する機能があるためです。 . 書くときに、return の後に巧妙に「;」を挿入してしまい、エラーが発生します。

JavaScript に関する 10 の不可解な点

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。