問題タブ [ecma262]
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 - 標準に対する信頼できる JavaScript 検証
Web サイトで JavaScript を検証しようとしています。スクリプトはエラーをスローせず、Chrome および Firefox (最新の安定バージョン) で正常に実行されます。ただ、アニメーション部分がIEでは絶対に動かない(9)[※1][※解決済み]。アニメーションには jQuery と jQueryUI を使用しましたが、クロス ブラウザーとの互換性があることを期待していました。
通常、私は IE ユーザーを気にしませんでしたが、anybrowser.orgの人々のアイデアが好きで、最小公分母を使用する代わりに標準に固執し、ブラウザー/JS エンジンに優雅な劣化を任せることを考えました。私のページは w3c バリデータによると HTML5 に準拠しており、JavaScript で同じことをしたかったのですが、受け入れられる方法が見つかりませんでした。
JSLint が機能しなかった理由 -
- ページを取得して w3c バリデーターのようにチェックすることはありません。
- したがって、jQuery 参照スクリプトをチェックする方法はありません。(これにはいくつかのSO投稿があります)。
ブラウザをチェックするECMA-264 テスト ページを見つけましたが、私の JavaScript はチェックしませんでした。
すべての序文の後の質問は、次のとおりです。Web ページの Javascript を検証するにはどうすればよいですか? JavaScript の信頼できるバリデーターはありますか?
* 1 追加: IE9 でスクリプトが動作しないのは縮小化とは関係ありません。縮小されていないバージョンでも機能しません。
*解決済み: 特定のページの問題は、このコメントによって解決されました。
これは「Javascript とは」として始まり、ここで終了し、 Programmersに移行しました。元の質問をプログラマーと SO の間で受け入れられるものに分割するのを手伝ってくれたYannisRizosに感謝します。
javascript - JavaScriptでのプリミティブラッパーの動作
書籍ProfessionalJavascriptfor Web Developersで、プリミティブラッパーは、プリミティブオブジェクトのプロパティとメソッドにアクセスしようとするときにJavaScriptによって内部的に使用されることを読みました。これは、文字列プリミティブの長さプロパティにアクセスしようとするたびに、値が再計算されることを意味しますか?私の腸は、文字列が固定されているため、その長さの値はどこかに格納され、ラッパーによってのみアクセスされると言っていますが、私はむしろ確信しています。
javascript - 負の数と非整数のべき乗を持つ Math.pow
の ECMAScript 仕様にMath.pow
は、次の固有のルールがあります。
- x < 0 で x が有限で y が有限で y が整数でない場合、結果は NaN になります。
( http://es5.github.com/#x15.8.2.13 )
結果としてMath.pow(-8, 1 / 3)
与えるのNaN
ではなく-2
このルールの理由は何ですか?この規則には、ある種のより広範なコンピュータ サイエンスまたは IEEE 的な理由があるのでしょうか。
アップデート
アマダンのやり取りのおかげで、今は理屈が分かってきた気がする。後世のために議論を広げたいと思います。
次の例を見てみMath.pow(823543, 1 / 7)
ましょ6.999999999999999
う7
。これは、1 / 7
最初に を 10 進表現に変換する必要があり0.14285714285714285
、切り捨てられて精度が失われるという事実によって生じる不正確さです。正の数を扱っている場合、実際の結果に非常に近い結果が得られるため、これはそれほど悪い問題ではありません。
しかし、ネガティブな世界に足を踏み入れると、問題が発生します。JavaScript エンジンが計算しようとすると、最初に 10 進数Math.pow(-823543, 1 / 7)
に変換する必要があるため、実際には答えのない計算になります。この場合、実際の答えは であるはずなのに、実数を見つけることができなかったため、返さなければならない場合があります。さらに、「最良の推測」を行うために実数に近い複素数を探すことは、数学の分野で JS エンジンを必要としないレベルの複雑さを伴う場合があります。1 / 7
Math.pow(-823543, 0.14285714285714285)
NaN
-7
私の推測では、浮動小数点数の精度の損失を考慮した結果、負の数から非整数のべき乗は常にあるべきであるというルールに導かれたNaN
ためです。基本的に、非整数のべき乗は例えそうでなくても、精度が失われた結果として複素数になり、そこから回復する良い方法がないかもしれません。
これで私はかなり満足していますが、さらなる情報を歓迎します。
javascript - JavaScript用のi18n(Intl)シムはありますか?
ECMAScriptInternationalizationAPIのシムを探しています。誰かがそのようなプロジェクトを知っていますか?(現在も作業中です。)
javascript - ECMAScript/JavaScript における「LexicalEnvironment」と「VariableEnvironment」の違いの明確化
これらは実行コンテキストに存在するため、これら2つの違いを誰かが明確にすることはできますか? ECMA 262 v 5の仕様を読んで違いをはっきりと理解するのは難しいです。
ありがとうございました、
javascript - Eval は本当に動的スコープを JavaScript に導入しますか?
Eval によって JavaScript に動的スコープがもたらされると人々は言いますが、そのステートメントがどのように有効であるかはわかりません。Eval を使用すると、呼び出し環境と同じレキシカル環境/変数環境を使用して式が評価されます ( ECMA 262 v. 5を参照)。式の代入または宣言は明らかに動的ですが、動的スコープを導入すると言うのは妥当ではないと思います。
Eval は動的スコープを導入しないと言っているのは正しいですか?
javascript - すべての関数宣言と式は、舞台裏で呼び出されたnew Function()によって作成されていますか?
関数定義について説明しているECMA262v5スクリプトの部分を読んでいます。関数宣言と関数式の両方について、次のことが言及されています。
13.2で指定された新しいFunctionオブジェクトを作成した結果を返します。
セクション13.2で説明されていることの最初のステップは、「新しいネイティブECMAScriptオブジェクトを作成する...」そして「Fの[[Class]]内部プロパティを「Function」に設定する」ことです。
「新しいFuncitonオブジェクトを作成する」という言葉のせいで、舞台裏では、new Function(....)を呼び出して関数の宣言/式を作成したのではないかと思いました。
javascript - JavaScript クロージャー - ECMA 仕様を使用して、クロージャーがどのように作成および維持されるかを説明してください
JavaScript クロージャーについて読んでいます。私は実行コンテキスト、レキシカル環境がどのように維持されるか、そしてレキシカル スコーピングに非常に精通しています。
JavaScript のクロージャがどのように作成され維持されているか知りたいです。実際にどのように機能しているかを知らずに、そのような重要な概念を理解するのが難しい場合があります。ウィキペディアによると、閉鎖は
関数または関数への参照と、参照環境 (その関数の非ローカル変数 (自由変数とも呼ばれます) への参照を格納するテーブル) を組み合わせたものです。
しかし、私の質問は、ECMA 仕様に従って、クロージャーが作成および維持される方法を知りたいということです。閉鎖理論の高レベルの説明を探しているわけではありません。回答でECMA仕様を参照してください。
注: 回答が ECMA 仕様を使用した閉鎖を説明していない限り、これを重複と見なさないでください。繰り返しますが、ウィキペディアを引用して例を挙げている人には興味がありません。JavaScript がどのようにこれを行っているかを完全に理解したいのです。(私はSO に関するこの質問に精通しています)。
javascript - グローバル スコープで宣言された関数を入力するとどうなるかについての詳細が ECMAScript 仕様 v5 にありませんか?
ECMAScript 仕様では、制御が関数内の関数の実行コンテキストに入ったときに何が起こるかについて詳しく説明しています。
制御がグローバル コードに入ったときに何が起こるかについての説明もあります。
ただし、グローバルコードで定義された関数の制御に入ったときに何が起こるかを指定するものは何もありません。
編集:これが私にとって重要な理由は、グローバルコードによって呼び出される関数の内部 [[Scope]] プロパティがどうなるか興味があるからです。グローバルな実行コンテキストのレキシカル環境になると思いますが、仕様でこれを指定するものは何もありません。