What can JavaScript do that other languages can't, or what JavaScript does better than most others?
JavaScript ha funzioni di prima classe con chiusure lessicali. Questo lo rende piuttosto potente.
Puoi sfruttare il paradigma della programmazione funzionale. Ad esempio, piuttosto che fare:
var array = [1, 2, 3, 4, 5],
results = [],
index,
iteree;
for (index = 0; index < array.length; index += 1) {
iteree = array[index];
if (iteree % 2 === 0) {
results.push(iteree);
}
}
Puoi fare:
var array = [1, 2, 3, 4, 5],
results = array.filter(function (iteree) {
return iteree % 2 === 0;
});
Puoi scrivere sistemi basati su eventi:
element.addEventListener('click', function (event) {
console.log('You clicked me! That tickles!');
}, false);
È possibile scrivere codice di rete non bloccante, in quanto le richieste in sospeso sono posizionate su una coda:
var request = new XMLHttpRequest();
request.onload = function () {
console.log(this.responseText);
};
request.open('get', 'yourFile.txt', true);
request.send();
Gli sviluppatori di Node.js hanno scoperto quanto fossero utili le chiusure e le code di eventi per eseguire attività relative all'IO. Da qui :
Javascript's support for closures allows you to use variables you've defined in the outer (calling) function inside the body of the callback - this allows to keep state between different functions that will be invoked by the node runtime independently.
. . . node allows your code to handle requests from hundreds of thousands open socket with a single thread concurrently by multiplexing and sequencing all your js logic in a single stream of execution . . .
This works pretty well for webapp servers as most of the time is actually spent on waiting for network or disk (database / sockets) and the logic is not really CPU intensive - that is to say: this works well for IO-bound workloads.
Bonus: come nelle lingue con membri privati, puoi nascondere i dati, grazie alle chiusure:
var makePerson = function (options) {
var locale = options.locale,
age = options.age;
return {
isOldEnoughToDrink: function () {
if (locale === 'en_US' && age >= 21) {
return true;
} else {
return true;
}
}
};
};
Le cose che portano JavaScript giù sono le sue parti cattive: ambito globale, ambito delle funzioni, nessun modulo, inserimento del punto e virgola, operatori interrotti, varargs danneggiati,% rottothis
, with
,% non sicuro% co_de, sintassi Java ( eval
), sintassi C, API DOM, prototipi e in ES6, new
. Saremmo stati meglio con Scheme, ma invece abbiamo ottenuto Scheme in una delle T-shirt con le maschere dipinte a mano di Java.
Per fortuna, hai il potere di decidere di non usare le parti cattive della lingua. Se hai la disciplina per usare solo le parti buone della lingua, non è così male. E nel mondo delle applicazioni web, dove la programmazione asincrona è necessaria per creare un'esperienza reattiva per gli utenti, disporre di funzioni di prima classe rende il linguaggio ben adattato all'attività in corso.
Modifica
Altri vantaggi:
- Sembra Java / C. Anche se (IMO) Scheme sarebbe stata una scelta migliore (e meno ingannevole), penso che i programmatori nuovi di Lisp siano scartati dalla sua sintassi "strana". La sintassi familiare di JavaScript facilita l'ambientazione. Anche se una lingua è "tecnicamente" superiore, se è troppo superficiale, la gente potrebbe decidere di non apprenderla o usarla per ragioni emotive.
- Letterali di espressioni regolari. In alcune lingue, devi scrivere espressioni regolari come stringhe, che possono portare a errori se non si esegue correttamente la fuga dei caratteri. In questa lingua è un po 'più facile scriverli.
- JSON è un sottoinsieme di JavaScript. Se stai costruendo messaggi JSON, gli oggetti nel tuo codice sembrano esattamente come gli oggetti che vengono consegnati.
- L'assenza di lezioni. Alcune lingue impongono la filosofia classica a te. Ma questo può ritorcersi contro, come quando la tua genealogia risulta insufficiente o mancante di un membro. Creare oggetti in JavaScript è semplice e dinamico: basta scrivere un oggetto letterale e applicare alcune proprietà su di esso. Fatto.