問題タブ [ecmascript-5]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Ecma-262 (EcmaScript 5) はどのように役立ちますか?
EcmaScript 第 5 版、またはEcma-262が発表され、言語にいくつかの変更が含まれています。新しいバージョンのどの機能が、より良いコードを書くのに役立ちますか?
javascript - (新しい)ECMAScript 5機能を最も活用するJavaScriptOOPデザインパターンはどれですか?
ECMAScript 5は現在最終ドラフトであり、オブジェクトとプロトタイプに関連する新機能が含まれています。SOとGoogleでOOPデザインパターンを探していると、JavaScriptで「OOPを実行する」方法がかなりたくさんあることがわかりました(ただし、従来のOOPをエミュレートしようとすることから、名前空間の汚染を減らすことを試みることまで、OOPを定義することもできます)。 。
ECMAScript 5がJavaScriptの世界をとっている方向に対して、最も前向きなデザインパターンはどれですか。その主な利点は何ですか?それらのうち、以前は実装できなかった、または実装するのに適したものはどれですか?
javascript - どの(javascript)環境がECMAscript 5ストリクトモードをサポートしていますか?(別名「厳密に使用」)
私がこれを書いている時点で、 ECMAScript5は最終ドラフトにあります。これは、グローバルオブジェクトへの割り当て、evalの使用、およびその他の制限を防ぐstrictモードが含まれているためです。(ジョン・レシグの記事は良い紹介です。)
この魔法の正気度保存モードは、ファイル(または関数)の先頭に「usestrict」という文字列を含めることでトリガーされます。ただし、古い環境では、「usestrict」は使用できません。「usestrict」を追加し、それを厳密な環境でテストしない場合、実際に厳密な環境に到達したときに壊れてしまう、それほど厳密ではないコードの時限爆弾を残す可能性があります。
どの環境が実際に「厳密な使用」を尊重しますか?
javascript - var キーワードの目的は何ですか? また、いつ使用 (または省略) する必要がありますか?
注: この質問は、ECMAScript バージョン 3 または 5 の観点から行われました。ECMAScript 6 のリリースでの新機能の導入により、回答が古くなっている可能性があります。
JavaScriptのキーワードの機能とは正確には何ですかvar
。また、その違いは何ですか
と
?
いつどちらを使用しますか?なぜ/何をしますか?
javascript - 古いバージョン用の新しいJavascript/Ecmascript 5メソッドを実装するライブラリはありますか?
Ecmascript 5はいくつかの完全に新しい機能を導入していますが、現在のバージョンで(低速ではありますが)完全に実装できるはずのいくつかの新しいメソッド(バインド、トリム、マップなど)も追加しています。これらの下位互換性のある機能を実装するライブラリは存在しますか(Prototypeなどを除く)。
javascript - ECMAScript 5 仕様のタイプミスの可能性はありますか?
ECMA-262、第 5 版仕様のセクション 7.6 の最後で、非終端記号UnicodeLetter、UnicodeCombiningMark、UnicodeDigit、UnicodeconnectorPunctuation、およびUnicodeEscapeSequenceの後に 2 つのコロンが続かない理由を知っている人はいますか?
セクション 5.1.6 から:
非終端記号はイタリック体で表示されます。非終端記号の定義は、定義されている非終端記号の名前の後に 1 つ以上のコロンを付けることによって導入されます。(コロンの数は、プロダクションがどの文法に属しているかを示します。)
レキシカル プロダクションは 2 つのコロンを持つことで区別され、これは「レキシカル コンベンション」の下にあるため、コロンを入れるつもりだったと推測しています。
これらが本当に非終端記号であり、字句文法の一部であることを確認するだけです。
編集:
これを閉じるための投票があることに気付きました。これがプログラミングに関連している理由を説明すると、ECMAScript インタープリターを実装したいすべての人に関係があります。
javascript - なぜ EcmaScript 5 の厳密モードは、識別子「eval」を制限するためにこれほど長い時間を費やすのですか?
仕様(Annex C) によると、厳格モードのコードは、 name で識別子を割り当てる可能性のあるほとんど何もできません eval
。実際の関数の使用を制限したい場合があることは理解できeval
ますが、名前の使用を制限することによってどのような目的が果たされるのかわかりませんか?
javascript - ECMAScript5 では、"use strict" の範囲は?
ECMAScript5 では、strict モード プラグマにはどのようなスコープがありますか?
私はこれをしたいと思います(主にJSLintがそれについて文句を言わないため):
しかし、それが他のコードを壊すかどうかはわかりません。私はこれを行うことができることを知っています。これにより、プラグマが関数にスコープされます...
しかし、JSLint は、「use strict」を有効にする前にコードを実行していると見なすため、(「strict」JSLint オプションが有効になっている場合) 文句を言います。
これが私の質問です。fileA.js がある場合:
および fileB.js:
そして、それらを同じ順序でhtmlページに含めます。プラグマはファイルにスコープされますか、それともプラグマはfileBに流れ込み、evalの実行をブロックしますか?
javascript - 単純なJavaScriptの継承の改善
John Resig(jQueryで有名)は、SimpleJavaScriptInheritanceの簡潔な実装を提供します。彼のアプローチは、物事をさらに改善しようとする私の試みに影響を与えました。Resigの元のClass.extend
関数を書き直して、次の利点を追加しました。
パフォーマンス–クラス定義、オブジェクト構築、および基本クラスのメソッド呼び出し中のオーバーヘッドが少なくなります
柔軟性–新しいECMAScript 5互換ブラウザ(Chromeなど)用に最適化されていますが、古いブラウザ(IE6など)には同等の「シム」を提供します
互換性–厳密モードで検証し、ツールの互換性を向上させます(VSDoc / JSDocコメント、Visual Studio IntelliSenseなど)
シンプルさ–ソースコードを理解するために「忍者」である必要はありません(ECMAScript 5の機能を失うとさらに簡単になります)
堅牢性–より多くの「コーナーケース」単体テストに合格します(IEでtoStringをオーバーライドするなど)
あまりにも良さそうなので、ロジックに根本的な欠陥やバグがないことを確認し、誰かが改善を提案したり、コードに反論したりできるかどうかを確認したいと思います。それで、私はclassify
関数を提示します:
constructor
また、コンストラクター名( vs. init
)と基本クラスのメソッド呼び出しの構文を除いて、使用法はResigとほぼ同じです。
そして、これが私のQUnitテストで、すべて合格しています。
誰かが私のアプローチとジョン・レシグの元のアプローチに何か問題があると思いますか?提案やフィードバックは大歓迎です!
注:上記のコードは、この質問を最初に投稿してから大幅に変更されています。上記は最新バージョンを表しています。それがどのように進化したかを確認するには、改訂履歴を確認してください。