問題タブ [ecmascript-harmony]
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.
node.js - Node.jsのフラグのリストはありますか?
Node.jsが受け入れるすべてのフラグ、特にES6-Harmony機能のフラグのリストを見つけようとしていますが、見つかりません。このようなものはありますか?
javascript - JavaScriptに適切なロケールサポートを追加することについて私が従うことができる現在の提案はありますか?
すべての主要なオペレーティングシステムとプログラミング言語/APIは少なくとも20年間ロケールをサポートしてきましたが、JavaScriptはまだサポートしていないようです。
JavaScriptがブラウザとサーバーの両方でますます完全なアプリケーションプログラミング言語になるにつれて、実際のロケールサポートの欠如が実際の問題になりつつあります。
EcmaScript標準に他の言語で存在するロケールサポートを追加する提案はありますか?「ハーモニー」プロジェクトの一環として、または他のどこかで?私はそのような提案を支持し、伝道したいと思います。
(これは私の前の質問のフォローアップです:JavaScriptのブラウザーからOSに設定されているユーザーロケールの国を判別することは可能ですか? )
javascript - Es6:オブジェクトプロパティの設定/更新/削除時にカスタムメソッドを呼び出す機能はありますか?
今後のES6定義では、オブジェクトプロパティが設定、更新、または削除されたときに、カスタム定義可能なメソッドを呼び出すことができることを読んだと思います。しかし、それを裏付けるブログ投稿がもう見つかりません。
これは正しいです?この機能は「プロキシ」と呼ばれていると思いますが、決定的なものは見つかりません。
さらに、これはes6-shimを使用して利用できるようになりますか?(https://github.com/paulmillr/es6-shim)おそらく私は新しいマップ機能を探していますが、やはりわかりません。
誰でも私に決定的な指針を示すことができますか?
javascript - Javascriptオプション型ヒント
プログラミング言語が静的に型付けされている場合、コンパイラーはメモリー割り当てについてより正確になり、したがって一般的にパフォーマンスが向上します(他のすべてのものは同じです)。
ES4はオプションの型ヒントを導入したと思います(私が理解していることから、Adobeはactionscriptのためにその仕様に貢献することに大きな役割を果たしました)。結果として、javascriptは型ヒントを公式にサポートしていますか?ES6は、ネイティブ変数のオプションの型ヒントをサポートしますか?
Javascriptが型ヒントをサポートしている場合、パフォーマンスの観点からどのように成果を上げるかを示すベンチマークはありますか?私はまだオープンソースプロジェクトがこれを使用しているのを見たことがありません。
javascript - JavaScript(FF)の*式*構文の場合は*何か*
Firefoxがの行に沿ってある種のJavaScript構文をサポートしていることを示すいくつかの例を見てきました*something* if *expression*;
。
私が話していることの例として、次の例を含むこのMDNの記事を参照してください。
私の質問は次のとおりです。
この種の構文を説明するためにどのような名前が付けられますか?私は主にこれを知りたいので、グーグルでそれについてもっと読むことができます。私はグーグルを思いつく限り最善を尽くしてみましたが、役立つ結果を得るために適切な用語をまとめることができませんでした。
この構文は、配列理解以外の他の場所に存在できますか?これがアレイの外部で使用されている他の例(上記の例など)を見たように感じますが、よくわかりません。
この構文の詳細はどこで読むことができますか?
Firefox以外にこれをサポートしているブラウザはありますか?
この機能はES5に含まれていますか、それともES-harmonyで計画されていますか?
javascript - IE で ES6 が利用できるようになるのはいつですか?
あなたが本当に答えを知っているか、何らかの情報を提供できるなら、これは正当な質問です.
Firefox と Chrome は、ES Harmony の多くの機能を組み込むために継続的に取り組んでいます...
私の質問は、実際には 2 つの部分です。
- ES6がいつ暫定的に完成するか知っている人はいますか?
- Internet Explorer がこれらの機能をサポートするまでどのくらいかかりますか? IE11になると思います。IE11 のリリース予定日はありますか?
javascript - ES6ドラフトでReturnIfAbruptはどういう意味ですか?
私は現在、ES6ドラフト用にいくつかのシムを実装しています。誰かが私に何ReturnIfAbrupt
を意味するのか教えてもらえないかと思います。たとえば、Number.toInt
(internalを呼び出す)の実装[[ToInteger]]
は次のとおりです。
ステップ2はReturnIfAbrupt(number)
です。// ?
何をすべきかわからないので、あなたは私が現在そのステップのために持っていることに気付くでしょう。それが言うときそれはどういう意味ReturnIfAbrupt(...)
ですか?
ドラフトのセクションを読みましたが、上記のコードの代わりに、ステップ2で何をすべきReturnIfAbrupt
か理解できません。// ?
私の読書から、それは何もすべきではないかもしれません、そしてReturnIfAbrupt
ステップは単にToNumberで発生したエラーを伝播させて関数を終了させることを意味します。ただし、言うまでもなく、それは非常に冗長に思えます。ToNumber
また、エラーをスローすることさえできるようには思えません。誰かが私に本当の意味を確認または理解するのを手伝ってもらえますか?
javascript - ES6(ECMAScript 6)の[[NativeBrand]]/[[Class]]にアクセスします
Object.prototype.toString
ES6のドラフトを読んでいたところ、次のセクションでこのメモに気づきました。
歴史的に、この関数は、この仕様の以前のエディションでさまざまな組み込みオブジェクトの名義型タグとして使用されていた[[Class]]内部プロパティの文字列値にアクセスするために使用されることがありました。toStringのこの定義は、これらの特定の種類の組み込みオブジェクトの信頼できるテストとして使用する機能を保持しますが、他の種類の組み込みオブジェクトまたはプログラム定義オブジェクトの信頼できる型テストメカニズムを提供しません。
es-discussでこのスレッドを読んだところ、ES6ドラフト[[Class]]
で置き換えられているよう[[NativeBrand]]
に思われるので、拡張不可能であると指定できます(少なくともAllen Wirfs-Brockの考えでした)。
不思議なことに、FireFoxとChromeで簡単なテストを実行しました(実験的なJavaScriptが有効になっています)。
"WeakMap"
[[NativeBrand]]
ES6ドラフトで指定されているの1つではありません。ただし、このテストは"[object WeakMap]"
両方のブラウザで返されました。
だから私は混乱しています。少し質問があります。
1. ChromeとFirefoxは正しく動作しますか?
ドラフトを読む1つの方法から、彼らは戻ってくるはずだと思われます[object Object]
(そして、これはすべてかなり新しいので、これらのブラウザーの将来のエディションでこの変更が見られても驚かないでしょう)。ただし、ドラフトのこのセクションの意図を理解するのは難しいです。特に、が付いている場所がいくつかあるため"???"
です。
es-discussをもっと熱心にフォローしている人は、関連する情報を持っていますか?または、ドラフト言語をよりよく理解できる人はいますか?
2.代替手段はありObject.prototype.toString
ますか?
上で引用したメモから、Object.prototype.toString
代わりに使用する必要がある新しいものがあるかのように、レガシーの理由で保持されているように聞こえます。特に、を読み取るノードの部分"it does not provide a reliable type testing mechanism for other kinds of built-in ... objects"
。これは、将来のビルトインをこの方法でテストできないことを意味しますか?
具体的な例を見てみましょう。
String
未知のソースから受け取ったオブジェクトがオブジェクト(プリミティブ文字列ではなく実際に構築されたオブジェクト)であることを確認したい場合は、次のようString
にすることができます。
これにより、どのフレームで構築されたかに関係なくunknownObject
、がオブジェクトであるかどうかを知ることができます。String
私の質問は、これは私がES6に移行するために採用するアプローチである必要がありますか?または代替手段はありますか?のようなものObject.getNativeBrandOf
?
3.[[NativeBrand]]
将来のタイプのオブジェクトは含まれないようですが、これらのオブジェクトをどのようにテストしますか?
これは機能しますか?
Symbol
...プライベート名の最終的な名前であると仮定します。
これを使うべきですか?
... または、他の何か?
私が尋ねる理由は、私が現在、可能な限り1、2年でES6にできるだけ簡単に移行できるようにしたいコードを書いているからです。の代替品がある場合はObject.prototype.toString
、それをシムインしてそこから続行できます。ありがとう!
アップデート
ベンビーの答えは、私の質問に対する答えを検索して理解するための正しい用語を私に提供してくれました。
この問題に関するes-discussのAllenWirfs-Brockからのメールを見つけました。
同じ質問をしている他の人のために、私が見つけたものは次のとおりです。
1. ChromeとFirefoxは正しく動作しますか?
はい、その理由を以下に説明します。
2.代替手段はありObject.prototype.toString
ますか?
現在のように、可能性という意味ではいくつかの「代替」がありますが、代替という意味ではありません。
a。 シンボルを使用します。@@toStringTag
しかし、私の理解では、それObject.prototype.toString
はおそらくまだ使用されるべきであるということです。@@toStringTag
から返すことができる結果を拡張できるようにするために提供されていますObject.prototype.toString
。独自の文字列タグを追加したいプロトタイプがある場合は、を使用@@toStringTag
して値を任意の文字列に設定できます。Object.prototype.toString
この値がES5組み込みの1つである場合を除いて、この値を返します。この場合、文字列タグの前に「〜」が付きます。
b。 ユーザー定義オブジェクトでのプライベートシンボルの使用。ユーザー定義オブジェクトに対して同じタイプのチェックを行うための最良の方法として、これを宣伝する1通の電子メールを読みました。ただし、それがどのように問題を解決するのかはわかりません。クロスフレームソリューションになる可能性があることを理解できず、ES6ビルトインと照合できないためです。
したがって、いくつかの選択肢がありますがObject.prototype.toString
、1つの注意点を除いて、現在および今後も継続することをお勧めします。
などのES5が組み込まれていることString
を確認することはできますが、ES6が組み込まれていることを確認することは、スプーフィングされる可能性があるため、絶対確実ではありません@@toStringTag
。これがなぜなのかわかりません。何かが足りないか、仕様が進化するにつれて変更される可能性があります。
3.[[NativeBrand]]
将来のタイプのオブジェクトは含まれないようですが、これらのオブジェクトをどのようにテストしますか?
上記のように、Object.prototype.toString
ES6ビルトインでも引き続き使用できますが、@@toStringTag
シンボルにアクセスできる人なら誰でもスプーフィングされる可能性があるため、絶対確実ではありません。ただし、それを意味するわけではないので、絶対確実な方法があるべきではないかもしれません(そしてそうすべきではありません!)。は別のフレームからのものであるか、ユーザーが作成したweakmapのようなオブジェクトである可能性があります。あなたが本当に知っている唯一のことは、それがWeakMapと機能的に同等であると報告しているということです。Object.prototype.toString(weakmap) == '[object WeakMap]'
weakmap instanceof WeakMap
weakmap
String
またはArray
(接頭辞がない)と機能的に同等であると報告するユーザー定義オブジェクトを使用できないのはなぜかという疑問を抱いているようです"~"
。
javascript - Harmony モジュール - プラットフォームの違いはどのように処理されますか?
私は、node.js のモジュール ローダーと、新しいハーモニー モジュールの仕様に非常に興味があります。
概ね気に入っているスペックですが、解決方法がよくわからない問題があります。
クロスプラットフォームの JavaScript ライブラリを構築したい場合、同じジョブに対して異なるプラットフォームで異なるライブラリを使用する必要がある場合があります。たとえば、node.js の Buffer モジュールはブラウザには存在しないため、プラットフォームに応じて異なるコードをロードする抽象化モジュールを作成する必要があります。
ハーモニーはコードの実行前に依存関係を解決するため、すべてのプラットフォームではなく、1 つのプラットフォームのコードのみをロードする必要があることをどのように知ることができるでしょうか?
ブラウザで、node.js でしか実行されないコードをロードしたくないのですが、この問題はどのように解決されますか?
javascript - ECMAScript6のグローバルスコープの`this`
ES6ドラフトを自分で調べてみましたが、どこを見ればよいかわかりません。
this
ES6で必然的にグローバルオブジェクトを参照しているかどうかを誰かに教えてもらえますか?また、このオブジェクトにはグローバルスコープと同じメンバーがありますか?
ES5に答えることができれば、それも役に立ちます。
グローバルスコープthis
では、ブラウザやNodeなどの他のほとんどのES環境のグローバルオブジェクトを指します。それが仕様で定義された動作なのか、それとも実装者が追加した拡張動作なのか(そして、この動作がES6実装でも継続するのか)を知りたいだけです。さらに、グローバルオブジェクトは常にグローバルスコープと同じものですか?それとも違いはありますか?
更新-知りたい理由:基本的に、ES5および6でグローバルオブジェクトを確実に取得する方法を理解しようとしています。これwindow
はブラウザーに固有であるため信頼できません。またglobal
、環境に固有であるため信頼できません。ノードのように。this
Nodeでモジュールスコープで参照できることは知ってmodule
いますが、それでもglobal
グローバルスコープで参照できると思います。クロス環境ES5および6に準拠した方法で、グローバルオブジェクトを取得したい(可能な場合)。私がグローバルスコープで知っているすべての環境でそれが行われているように見えますthis
が、それが実際の仕様の一部であるかどうかを知りたいです(そして、私が慣れていない可能性のある環境全体で非常に信頼できます)。
また、グローバルスコープとグローバルオブジェクトが仕様で同じものであるかどうかも知る必要があります。言い換えると、グローバルスコープのすべての変数は?と同じになりglobalobject.variable_name
ますか?
アップデート2-私がやろうとしていること:
ES5環境用にいくつかのES6シムを開発しました。(1)ES6ビルトインがすでに存在するかどうかを確認して、可能な場合はシムの代わりに使用できるようにし、(2)シムをグローバルスコープに追加する(ビルドされている場合)ための最良の方法を知りたいです。 insはまだ存在していません。
現在、私はこのパターンに従っています:
(1)には他にもいくつかの可能性がありますが、結局のところ、グローバルスコープで使用せずにグローバルスコープに何かを追加する方法が必要ですvar
(これは、ビルトインをチェックする前にオーバーライドするためです。var
巻き上げる[少なくともナイーブなケースでは、おそらく私もステートメントを間接的にすることができますか?])eval
。var
コードをstrictモードで実行できるようにして、問題を悪化させたいと思います。
ES5仕様により、間接的eval
にグローバルスコープでコードを実行することを発見しました。だから私は少なくともそれをすることができます。私の質問はthis
、グローバルスコープに入る場合です。(1)そのオブジェクトのプロパティをチェックすると、ビルトインがグローバルスコープにすでに存在するかどうかがわかりますか?(2)そのオブジェクトにプロパティを追加すると、グローバルスコープに変数を追加できますか?