1


1

Javascriptは信じられないほどの言語であり、jQueryのようなライブラリはそれを使うことをほとんど簡単にしすぎます。

Javascriptの最初の設計者はこの言語に何を含めるべきでしたか、または将来のバージョンに追加するために彼らに圧力をかけるべきなのは何でしょうか。

私が見たいもの: -

  • ある種のコンパイルされたバージョンの言語なので、プログラマーは私達のエラーをもっと早く捉えることができ、同時にブラウザが消費するより速い解決策を提供することができます。

  • オプションの厳密型(例えば、varをfloatとして宣言し、そのようにしておくことができるなど)。

私はJavascriptの専門家ではないので、これらはすでに存在しているかもしれませんが、他に何があるべきですか? あなたが見たいと思うだろう他のプログラミング言語のキラー機能がありますか?

7 Answer


5


http://www.jslint.com/[JSLint]、Douglas Crockfordの作者からhttps://rads.stackoverflow.com/amzn/click/com / 0596517742 [Javascript:The Good Parts]をお読みください。 それは本当に印象的で、そして悪い部分もカバーしています。


5


私がずっと切望していたのは、ハッシュのサポート*です。 具体的には、オブジェクトのexpandoプロパティを追加する必要なしに、オブジェクトに関するメタデータを追跡できます。

Javaには* + Object.getHashCode()+ が用意されており、デフォルトでは基になるメモリアドレスが使用されます。 Pythonは、メモリアドレスを取得する + id(obj)+ とカスタマイズ可能な + hash(obj)+ *を提供します。等 Javascriptはどちらにも何も提供しません。

例えば、私はあなたが私に渡したオブジェクトを目立たないようにそして優雅に強化しようと試みるJavascriptライブラリを書いています。 your

要素、あるいはDOMとは無関係のものすらあります。 各オブジェクトを1回だけ処理する必要があるとしましょう。 それで、各オブジェクトを処理した後、見たように「マーク」する方法が必要です。

理想的には、追跡するために私自身のハッシュテーブルまたはセット(どちらかの方法で辞書として実装される)を作ることができます。

var processed = {};

function process(obj) {
    var key = obj.getHashCode();

    if (processed[key]) {
        return;    // already seen
    }

    // process the object...

    processed[key] = true;
}

しかし、これは選択肢ではないので、各オブジェクトにプロパティを追加することに頼らなければなりません。

var SEEN_PROP = "__seen__";

function process(obj) {
    if (obj[SEEN_PROP]) {    // or simply obj.__seen__
        return;    // already seen
    }

    // process the object...

    obj[SEEN_PROP] = true;   // or obj.__seen__ = true
}

しかし、これらのオブジェクトは私のものではないので、これは私のスクリプトを邪魔にします。 この手法は、任意のオブジェクトに対して信頼性の高いハッシュキーを取得できないという事実を回避するための事実上のハッキングです。

もう1つの回避策はすべてのラッパーオブジェクトを作成することですが、多くの場合、元のオブジェクトからラッパーオブジェクトに移動する方法が必要です。いずれにしても元のオブジェクトのexpandoプロパティが必要です。 さらに、元のオブジェクトがDOM要素の場合、IEでメモリリークを引き起こす循環参照が作成されるため、これは安全なクロスブラウザ手法ではありません。

Javascriptライブラリの開発者にとって、これは繰り返し発生する問題です。


1


文字列を強制せずに配列/オブジェクトをキーとして使用する機能は素晴らしいかもしれません。


1


_ Javascriptの最初の設計者はこの言語に何を含めるべきでしたか、または将来のバージョンに追加するために彼らに圧力をかけるべきなのは何でしょうか。 _

過去15年間ですべての開発者に起こる大きな頭痛の種を防ぐために、わずかに異なる言語の実装(名前を付けない)と互いに競合するのではなく、彼らは集まり、何を実装するかを決定するべきでした。


1


Javascriptには、他の言語と区別するための名前がありません。


1


それがより良いことができるいくつかのささいなことがあります。

文字列の連結に「+」を選択するのは間違いでした。 `&`の方がよかったでしょう。

`+ for(x in list)+`は、リテラル配列を使用するのが難しくなるため、インデックスを反復処理するのがイライラする可能性があります。 新しいバージョンには解決策があります。

適切なスコープはいいでしょう。 v1.7はこれを追加しています、しかしそれは不格好に見えます。

オブジェクト内で 'private’および 'protected’変数を使用する方法は、クロージャを利用してそれらが有効範囲に与える影響を利用するため、少しあいまいで覚えにくいです。 この仕組みを隠すためのいくつかの構文上の砂糖は素晴らしいでしょう。

正直に言うと、私が日常的に経験している問題の多くは実際にはDOMの問題であり、JavaScript自体ではありません。 もう1つの大きな問題は、もちろん、最近のバージョンのJavaScriptには、ジェネレータのような興味深く便利なものがあることです。 残念ながら、ほとんどのブラウザは1.5で立ち往生しています。 明らかにFireFoxだけが前進しています。


0


ファイルIOがありません…​. 本当に必要ないと言う人もいるでしょうが…