2

私は JavaScript/JScript/ECMAScript でライブラリを構築したいと考えています...それを何と呼びたいとしても、それは最新の標準 (HTML5、CSS3、ESv5) を対象とし、標準をサポートするすべてのブラウザを対象としています! 今では、jQuery や MooTools など、便利なライブラリがすでにたくさんあることを知っています。もちろん、それらは素晴らしいものであり、必要に応じて既に使用していますが、人気があるという理由だけで、他のすべての開発者と同じ時流に乗ることを余儀なくされるべきではありません!

したがって、次の質問のために、jQuery や MooTools などのサードパーティ ライブラリには関心を持たないようにしましょう。JavaScript/JScript/ECMAScript の核心に取り掛かりましょう。

まず、違いがわからなかったので、これに先立って質問しました(JavaScript、JScript、およびECMAScriptの違いは何ですか? )。

ありがたいことに、私は次のように結論付けました。

ECMAScript は言語仕様です。JavaScript と JScript は ECMAScript の方言です。

JavaScript は Mozilla の ECMAScript の実装です。

JScript は、Microsoft による ECMAScript の実装です。

OK、それは素晴らしいシンプルな答えでしたね。しかし、そこから生じるいくつかの疑問があります:

  1. 「JavaScript」は非 Mozilla ブラウザでサポートされていますか? また、どの程度までサポートされていますか?
  2. "JScript" は Microsoft 以外のブラウザでサポートされていますか? また、どの程度までサポートされていますか?

これら 2 つの質問に基づいて、少し掘り下げて、IE9、FF14、および GC19 で簡単なテストを実行しました。

テストコードは次のとおりです。

<!DOCTYPE html>
<html>
    <head>
        <title>HTML 5 Template</title>
        <script language="JavaScript1.3">
            jsver = "1.3";
        </script>
        <script language="JavaScript1.4">
            jsver = "1.4";
        </script>
        <script language="JavaScript1.5">
            jsver = "1.5";
        </script>
        <script language="JavaScript1.6">
            jsver = "1.6";
        </script>
        <script language="JavaScript1.7">
            jsver = "1.7";
        </script>
        <script language="JavaScript1.8">
            jsver = "1.8";
        </script>
        <script type="text/javascript">
            document.write("<B>Your browser supports JavaScript version " + jsver + ".</B>")
        </script>
    </head>
    <body>
    </body>
</html>

結果は、IE9 = JSv1.3、FF14 = JSv1.8、GC19 = JSv1.7 でした。

OK、次に、ECMAScript バージョン 5 のサポートをテストするこのテストを実行しました: http://kangax.github.com/es5-compat-table/#showold

再び同じブラウザー (IE9、FF14、GC19) を使用すると、ESv5 はかなりよくサポートされているようです!

トリッキーなビットが来ます!私は Microsoft 出身で、C# や ASP.NET などの言語を使用してソフトウェアを作成しているため、当然、選択した IDE は Visual Studio (現在は 2010) です。JavaScript インテリセンスを見ると、ActiveXObject、Array、Object などが表示されます。

  1. VS2010 の IntelliSense を信頼する必要がありますか?
  2. ESv5 でサポートされているオブジェクトと機能のリファレンスはどこにありますか?
  3. ブラウザが特定のオブジェクトまたは機能をサポートしているかどうかを確認するにはどうすればよいですか?
  4. 準拠した ESv5 コードを作成するのに役立つ VS2010 より優れたものはありますか?
  5. Object、Number、Boolean などの既存のオブジェクトの実装をオーバーライドしても安全ですか、それとも既存の実装を拡張するだけですか?

最後に、jQuery についてです。コアのコンプライアンスと機能を自分で書くのは面倒だとしましょう。jQuery の上に置くライブラリを書くことはできますか... それとも、これは単なる失敗ですか?

4

2 に答える 2

1

1) いいえ。確かに、有効な ECMAScript だけに限定されるわけではありません。

2) http://kangax.github.com/es5-compat-table/は常に役に立ちます。

3) 定義されているかどうかを確認するだけです。例えば

typeof(Array.isArray) === 'function'; // true in newer browsers, false in IE8

4) あなたの最善の策は、仕様を読むことです! コードでを使用"use strict";すると、いくつかのクラスのエラーもキャッチされるため、適切な方法です。http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/での厳密モードの詳細な説明

5) 確かに、元のオブジェクトを置き換えることはありません。プロパティを拡張する場合は、準拠した実装がまだ存在しないことを最初に再確認します。たとえば、PrototypeJS は (ブラウザが実装する前に) a を追加しましたdocument.getElementsByClassName。ブラウザがそれをネイティブに実装し始めたとき、Prototype を使用しているサイトがまだ遅い JS ベースのバージョンを使用していることに気付きました。修正は、プロトタイプの定義をif (document.getElementsByClassName == undefined) { }

于 2012-08-21T12:13:59.987 に答える
1

2)あなたが提供した概要はかなり良いと思います。他に何が欲しいですか?

3) ブラウザ間の違いを均等にする優れたライブラリはES5-shimです。機能を自動検出し、サポートされていないブラウザーにシムを提供します。

4) 常に使用"use strict";し、何らかのコードの強調表示とおそらくコード補完を備えた、選択した優れたエディターを用意してください。私はブラウザ コンソールまたは Firefox スクラッチパッド (良いツールのばかげた名前) を使って簡単なハッキング セッションを行い、すべてをメモ帳 ++ (= お好みの IDE) にまとめます。

5) ネイティブ JavaScript オブジェクトの拡張については、多くの議論があり、長所と短所があります。Prototype と MooTools はこのように進みます。jQuery は別の方法を取り、そのための別のオブジェクトを提供します。個人的には、ネイティブ (特にホスト) オブジェクトをそのままにして、必要な機能を備えた独自の名前空間を持つことを好みます。

于 2012-08-21T12:38:57.557 に答える