2009-07-12 10 views
1

Javascript ist eine unglaubliche Sprache und Bibliotheken wie jQuery machen es fast zu einfach zu bedienen.Was fehlt Javascript?

Was sollten die ursprünglichen Designer von Javascript in die Sprache eingefügt haben, oder was sollten wir unter Druck setzen, um sie zukünftigen Versionen hinzuzufügen?

Ich mag Dinge, Sie zu sehen: -

  • Eine Art kompilierte Version der Sprache, so dass wir Programmierer können früher mehr unserer Fehler fangen, sowie eine schnellere Lösung, die für Browser verbrauchen .
  • optionale strikte Typen (z. B. eine var als float deklarieren und so behalten).

Ich bin kein Experte für Javascript, also vielleicht diese bereits existieren, aber was sollte sonst noch da sein? Gibt es irgendwelche Killer-Features anderer Programmiersprachen, die Sie gerne sehen würden?

+0

Sie könnten jslint in Bezug auf Ihren ersten Punkt interessant finden. Keine Compilation, aber Syntaxprüfung –

+0

Ich empfehle das Lesen von Crockfords Buch "Javascript: The Good Parts", das auch die schlechten Teile abdeckt;) –

+0

Ihre Probleme scheinen in der zu erwartenden Unruhe beim Wechsel von einer statisch getippten zu einer dynamischen Sprache zu liegen . Das beste Mittel dafür ist der Unit-Test. Komponententests sind sehr hilfreich in dynamischen Sprachen. –

Antwort

5

Lesen Javascript: The Good Parts vom Autor von JSLint, Douglas Crockford. Es ist wirklich beeindruckend und deckt auch die schlechten Teile ab.

+0

Sei einfach vorsichtig. Wie alle Experten hat Crockford starke Meinungen, von denen einige fraglich sein können. – staticsan

0

Datei-IO fehlt .... obwohl einige sagen, es wäre wirklich braucht es nicht ...

+1

Datei-IO ist Teil von nur wenigen Sprachen wie PERL. Meistens ist es Teil der Bibliotheken einer Sprache. – yfeldblum

+0

die Frage war nicht streng über Syntax – jle

+0

Eine Datei IO-Bibliothek war, wenn ich mich richtig erinnere, in einer experimentellen Version des Mozilla-Browsers etwa 5-6 Jahren. –

1

Die Möglichkeit, Arrays/Objekte als Schlüssel ohne String-Zwang zu verwenden, wäre vielleicht schön gewesen.

1

Was sollten die ursprünglichen Designer von Javascript in die Sprache aufgenommen haben, oder was sollten wir sie unter Druck setzen, um sie zukünftigen Versionen hinzuzufügen?

Sie habe sie zusammengetan und beschlossen, zusammen was eher zu implementieren, als mit leicht unterschiedlichen Implementierungen der Sprache gegeneinander antreten (keine Namen zu nennen), die immensen Kopfschmerzen zu verhindern, die für jeden Entwickler hat entspann in den letzten 15 Jahren.

5

Eine Sache, nach der ich mich immer schon sehnte und danach sehnte, war eine Unterstützung für Hashing. Lassen Sie mich insbesondere Metadaten über ein Objekt verfolgen, ohne eine expando-Eigenschaft für dieses Objekt hinzufügen zu müssen..

Java stellt Object.getHashCode() zur Verfügung, das standardmäßig die zugrunde liegende Speicheradresse verwendet; Python stellt id(obj) zur Verfügung, um die Speicheradresse zu erhalten und hash(obj) anpassbar zu sein; etc. Javascript bietet für beides nichts.

Zum Beispiel schreibe ich eine Javascript-Bibliothek, die versucht, einige Objekte, die Sie mir geben, z. B. Ihre <li> Elemente oder sogar etwas ohne Zusammenhang mit dem DOM unauffällig und anmutig zu verbessern. Nehmen wir an, ich muss jedes Objekt genau einmal verarbeiten. Nachdem ich jedes Objekt bearbeitet habe, brauche ich einen Weg, es zu markieren.

Idealerweise konnte ich meine eigene Hash-Tabelle oder einen Satz (oder so, implementiert als ein Wörterbuch) machen den Überblick zu behalten:

var processed = {}; 

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

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

    // process the object... 

    processed[key] = true; 
} 

Aber da das nicht eine Option ist, muss ich das Hinzufügen einer Eigenschaft greifen auf jedes Objekt:

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 
} 

Aber diese Objekte sind nicht meine, so das macht mein Skript penetrant. Die Technik ist effektiv ein Hack, um die Tatsache zu umgehen, dass ich keinen zuverlässigen Hash-Schlüssel für irgendein beliebiges Objekt bekommen kann. Eine andere Problemumgehung besteht darin, Wrapper-Objekte für alles zu erstellen, aber oft benötigen Sie einen Weg, um vom ursprünglichen Objekt zum Wrapper-Objekt zu gelangen, das sowieso eine expando-Eigenschaft für das ursprüngliche Objekt erfordert. Außerdem wird dadurch ein zirkulärer Verweis erzeugt, der Speicherlecks im IE verursacht, wenn das ursprüngliche Objekt ein DOM-Element ist. Dies ist also keine sichere browserübergreifende Technik.

Für Entwickler von Javascript-Bibliotheken ist dies ein wiederkehrendes Problem.

+0

Meine Wunschliste Artikel würde meist auch, was Sie suchen, auch. – chaos

+0

Richtig - Ich habe Ihre Antwort positiv bewertet. Ich wollte das Szenario klären. –

+0

für Ihr spezifisches Beispiel von DOM-Objekten sollte es einen Weg geben, da jquery es schafft, für sie uniqueed IDs zu erstellen (intern diese verwendet). für den allgemeinen Fall von JavaScript-Objekten dieses – oberhamsi

1

Javascript fehlt ein Name, der es von einer Sprache unterscheidet, die es nicht wie ist.

+0

Nun härter ist, wurde die Syntax bewusst sein Java-like, so würde ich nicht sagen gemacht „nichts Vergleichbares.“ Ohne den Einfluss von Java hätte Eich wahrscheinlich die Syntax wie Self oder Scheme gemacht. :-) – Nosredna

+2

was ist wie ECMAScript? –

+0

Schema-ähnliche Sprache, Java-ähnliche Syntax. – Triptych

1

Es gibt ein paar kleine Dinge, die es besser machen könnte.

Die Wahl von + für String-Verkettung war ein Fehler. Ein & wäre besser gewesen.

Es kann frustrierend sein, dass for(x in list) über Indizes iteriert, da es die Verwendung eines literalen Arrays erschwert. Neuere Versionen haben eine Lösung.

Richtige Scoping wäre nett. v1.7 fügt das hinzu, aber es sieht klobig aus.

Die Art und Weise, 'private' und 'geschützte' Variablen in einem Objekt zu verwenden, ist ein wenig unklar und schwer zu merken, da es Verschlusssysteme ausnutzt und deren Auswirkungen auf das Scoping beeinflusst. Irgendein syntaktischer Zucker, um die Mechanik davon zu verbergen, wäre fabelhaft.

Um ehrlich zu sein, sind viele der Probleme routinemäßig stolpern über DOM Macken, nicht JavaScript an sich. Das andere große Problem ist natürlich, dass neuere Versionen von JavaScript interessante und nützliche Dinge wie Generatoren haben. Leider sind die meisten Browser bei 1,5 festgefahren. Scheinbar geht nur FireFox voran.

+0

Ich bin mir nicht sicher '&'. Es sollte etwas sein, das nicht für Zahlen verwendet wird. – Nosredna

+0

D'oh! Ich habe das übersehen ... Ich habe vorgeschlagen & weil das die meisten BASICs benutzen, wenn sie + nicht benutzen. Es kann nicht verwendet werden. wie in PHP, weil das eine andere Bedeutung hat. Nicht sicher, was ich noch vorschlagen soll ... – staticsan

+0

Nun, ich stimme zu + saugt. Verwirrt die Leute die ganze Zeit. – Nosredna