問題タブ [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.

0 投票する
1 に答える
971 参照

javascript - ECMAScript がまだ W3C の推奨事項ではないのはなぜですか?

理論的には、ブラウザーは Web ページのクライアント側スクリプト作成用に複数のプログラミング言語をサポートできます。実際、ECMAScript は、すべてのブラウザーで広く実装され、使用されている唯一のスクリプトです。そのため、ほとんどの人にとって、それは Web の不可欠な部分です。

ただし、Web ページ スクリプトの W3C による推奨として推進されたことはありません。また、クライアント側の双方向性がますます重要になっているにもかかわらず、HTML5 はそれを促進しているようです。なぜそうなのですか?

  • Web プラットフォームでのプログラミング言語の独占を防ぐためですか? (明らかに失敗)
  • W3C が Web の宣言側のみに集中することを好むためでしょうか?
  • それとも単なる政治的スタンス?
0 投票する
2 に答える
8024 参照

javascript - JavaScript 文法で有効な左側の式は何ですか?

さて、私たちは皆、有効な左辺の式が何であるかを知っています。すこし。*

しかし、 ECMA-Script standardの定義を見て、私は非常に混乱しています:

それは単なる定義の誤りですか、それともここで何か間違っていますか? つまり、それは実際にそれを意味するのではありませんか

有効な代入式であるはずですか?


*私の謙虚な理解から、これははるかに理にかなっています:

0 投票する
3 に答える
6017 参照

javascript - ES5のObject.defineProperty?

列挙を構成可能にする「新しい」Object.create に関する投稿を見ています。ただし、これは Object.defineProperty メソッドに依存しています。このメソッドのクロス ブラウザー実装が見つかりません。

古い Object.create の作成に行き詰っていませんか? IE6/7で動かないものは書けません。

0 投票する
2 に答える
196 参照

javascript - ECMAScriptでの関数オブジェクト式の優先順位

ECMAScriptを発行する小さなコンパイラを実装するには、関数オブジェクト式がどの程度強力にバインドされるか、つまり「演算子」の優先順位を知る必要があり function(a1, a2, ...) { ... }ます。

たとえば、どのよう function(a1, a2, ...) { ... } (b1, b2, ...) に解析されることになっていますか?希望する結果、つまり関数オブジェクトへのb1、b2、...の適用を取得するには、Rhinoインタープリターで関数オブジェクトを括弧で囲む必要があります。

0 投票する
4 に答える
1260 参照

javascript - ECMA-/Javascripts Array.prototype.forEach

Javascript (ECMAscript) は、Array.prototype.forEachバージョン 1.6 (ECMAscript エディション 3、2005) 以降のメソッドをサポートしています。そのため、かなり多くのブラウザがすでにそのメソッドをサポートしており$.each()、たとえば jQuery のメソッドと比較して信じられないほど高速です。
(実際には、どの Javascript ライブラリーに関係なく、すべての実装に勝っています)

jQuery と比較すると、約 60 ~ 70% 高速です。JSPerfのforEach と jQueryで試してみてください。

これまで使用してきた唯一の欠点は、イテレーションを早期に中断する方法がわからないことです。for, whileand do-whilehave aステートメントと同様にbreak、jQuerysはループを中断する.each()をサポートしてreturn falseいます。

ECMAScript Edition 5 の仕様(私が見つけた最新のもの)を調べましたが、そのループからの早期のブレークについては言及されていません。

では、質問ですが、ダグラス・クロックフォード氏はこれを と呼びdesign errorますか?
私は何かを見逃していますか?そのようなループを早期に中断することは可能ですか?

編集

これまでの回答に感謝します。誰も「ネイティブ」ソリューションを思い付いていないので、そのための実装は実際にはありません(おそらく機能ですか?)。とにかく、私は提案された方法があまり好きではないので、少しだまされて、最終的に私が好きな方法を見つけました(少なくとも、より良い)。次のように見えます:

これは「実際の」製品コードです。私は css3 変換プロパティを検索する良い方法を探していましたが、ecma5 仕様と奇妙な Javascript フォーラムで迷子になりました :-)

したがって、配列オブジェクト自体を 3 番目のパラメーターとして.forEachコールバックに渡すことができます。探しているものが見つかったらすぐに、元の配列からコピーを作成し、slice(0)そのプロパティを呼び出して 0 に設定します。.length非常にうまく機能します。

誰かがより良い解決策を思いついたら、もちろんこれを編集します。

0 投票する
2 に答える
2076 参照

javascript - ES3 プログラムが ES5 エンジンで確実に実行されるようにするにはどうすればよいですか?

そのため、ECMAScript 5 には ECMAScript 3 との非互換性がいくつか導入されています。


多くの 記事が書かれており、ES5 の厳密モードthis === null || this === undefinedで可能であると述べています。

しかし、標準 が実際に示唆しているのは、ES5 エンジンは非厳密モードでもこれを許可するということです。

15.3.4.3 ... thisArg 値がそのまま値として渡されthisます。これは第 3 版からの変更で、aundefinedまたはnullthisArg がグローバル オブジェクトに置き換えられ、ToObject が他のすべての値に適用され、その結果がthis値として渡されます。

現在、ES5 をこのように実際に実装しているブラウザは IE9 だけであり、これにより現在のスクリプトが機能しなくなる可能性があることが判明しています。偉大な。


ES5 仕様の付録 E には、他にも多数の非互換性がリストされています。

では、十分に試行された ES3 スクリプトが問題なく動作し続けることを確認する最善の方法は何でしょうか? ある種の自動テストスイート?すべて手動でテストする必要がありますか?

0 投票する
1 に答える
1797 参照

javascript - typeof this が「オブジェクト」を返すのはなぜですか?

Chrome、Firefox、Safari で同じ結果が表示されるので、仕様どおりだと思いますが、なぜですか? そして、これは仕様のどこで定義されていますか? そして、関数ではないのはなぜですか?

0 投票する
3 に答える
22461 参照

javascript - タイプのJavascriptの最大サイズ?

JavaScript の型を調べて、一部のデータ型の最大ストレージ サイズを調べようとしています。たとえば、ブラウザーがクラッシュするまで var サイズを増やすための再帰的アルゴをすばやく設定しました。これにより、既存のバージョンの chrome の文字列の場合、最終的に 128 MB (または 256 MB) 近くになります。

これに関する仕様を見つけることができなかったので、私は苦痛な方法でそれを行ってきましたが、絶え間ないブラウザーのクラッシュにより、これは苦痛な試行になります (この特定の問題では、何らかの理由で catch を試しても役に立たないようです)。

他のタイプ (配列、オブジェクト、関数、文字列、数値、ブール値など) の最大ストレージ サイズに関する情報も探しています。

EMCA-262 セクション 8.4 はこれについて曖昧です

String の長さは、その中の要素 (つまり、16 ビット値) の数です。空の String の長さはゼロであるため、要素は含まれません。

...おそらく、これはブラウザに実装されていると特定する必要があるものでしょうか?

ただし、ECMA は数字について教えてくれます。たとえば、

Number 型には、正確に 18437736874454810627 (つまり、2^64−2^53+3) の値があり、IEEE Standard for Binary Floating-Point Arithmetic で指定されている倍精度 64 ビット形式の IEEE 754 値を表します。 9007199254740990 (つまり、2^53−2) の IEEE 標準の個別の「非数」値は、ECMAScript では単一の特別な NaN 値として表されます。

しかし、オブジェクトについては何も表示されません。

ブラウザでの使用には何が期待できますか? 非常に大きなオブジェクトや文字列を管理するのに役立つコードベースはありますか?

1 つのスクリプトに割り当てることができるメモリの量は?

0 投票する
9 に答える
12362 参照

javascript - ECMAScript は本当に Lisp の方言ですか?

私の友人は、第4回ヨーロッパLispシンポジウムのウェルカムメッセージで私の注意を引きました:

... Common Lisp、Scheme、Emacs Lisp、AutoLisp、ISLISP、Dylan、Clojure、ACL2、ECMAScriptなど、あらゆる Lisp 方言の実装と適用...

次に、ECMAScript が本当に Lisp の方言であるかどうかを尋ねました。本当にそう考えてよいのでしょうか。なんで?

ある言語が Lisp の方言であるかどうかを判断するのに役立つ、明確で明確な一連の基準はありますか? または、非常に大まかな意味での方言です (そして、その場合、Lisp 方言のリストに Python、Perl、Haskell などを追加できますか?)

0 投票する
3 に答える
5053 参照

javascript - JavaScriptでの間接関数呼び出し

のようなものがあります

しかし、これがあります

このコンテキストでは「1」はあまり意味がないようです。次のように問題なく機能します。

その構文を説明するECMAScriptの特定の部分を指摘できますか?