JavaScript
JavaScript (abreviat comunament JS) és un llenguage de programació interpretat, dialecte de l'estàndart ECMAScript. Es definix com orientat a objectes,[1] basat en prototips, imperatiu, débilmente tipado i dinàmic. S'utilisa principalment del costat del client, implementat com a part d'un navegador web permetent millores en la interfaç d'usuari i pàgines web dinàmiquesErro en la cita: Element <ref> no vàlit;
les referencies sense nom deuen de tindre contingut i JavaScript del costat del servidor (Server-side JavaScript o SSJS). El seu us en aplicacions externes a la web, per eixemple en documents PDF, aplicacions d'escritori (majoritàriament widgets) és també significatiu. Des de 2012, tots els navegadors moderns soporten completament ECMAScript 5.1, una versió de JavaScript. Els navegadors més antics soporten per lo manco ECMAScript 3. La sexta edició es va lliberar en juliol de 2015.[2]

JavaScript es va dissenyar en una sintaxis similar a C++ i Java,[3][4] encara que adopta noms i convencions dellenguage de programació Java. No obstant, Java i JavaScript tenen semàntiques i propòsits diferents. La seua relació és purament comercial, despuix de la compra del creador de Java (Sun Microsystems) de Netscape Navigator (creador de LiveScript) i el canvi de nom dellenguage de programació. Tots els navegadors moderns interpreten el còdic JavaScript integrat en les pàgines web. Per a interactuar en una pàgina web es proveïx allenguage JavaScript d'una implementació del Document Object Model (DOM). Javascript és l'únic llenguage de programació que entenen de forma nativa els navegadors. Tradicionalment es venia utilisant en pàgines web HTML per a realisar operacions i únicament en el marc de la aplicació client, sense accés a funcions del servidor. Actualment és àmpliament utilisat per a enviar i rebre informació del servidor junt en ajuda d'atres tecnologies com AJAX. JavaScript s'interpreta en el agent d'usuari al mateix temps que les sentències van descarregant-se junt en el còdic HTML. Des dellançament en juny de 1997 de l'estàndart ECMAScript 1, han existit les versions 2, 3 i 5, que és la més usada actualment (la 4 es va abandonar[5]). En juny de 2015 es va tancar i va publicar la versió ECMAScript 6.[6]
Història
editarNaiximent de JavaScript
editarJavaScript va ser desenrollat originalment per Brendan Eich de Netscape en el nom de Mocha, el qual va ser renombrado posteriorment a LiveScript, per a finalment quedar com JavaScript. El canvi de nom va coincidir aproximadament en el moment en que Netscape va agregar compatibilitat en la tecnologia Java en la seua navegador web Netscape Navigator en la versió 2002 en decembre de 1995. La denominació va produir confusió, donant l'impressió de que ellenguage és una prolongació de Java, i va ser considerada per molts com una estratègia de mercadotècnia de Netscape per a obtindre prestigi i innovar en l'àmbit dels nous llenguages de programació web.[7][8]
«JAVASCRIPT» és una marca registrada d'Oracle Corporation.[9] És usada en llicència pels productes creats per Netscape Communications i entitats actuals com la Fundació Mozilla.[10][11]
Microsoft va donar com a nom al seu dialecte de JavaScript «JScript», per a evitar problemes relacionades en la marca. JScript va ser adoptat en la versió 3.0 d'Internet Explorer, lliberat en agost de 1996, i va incloure compatibilitat en el Efecte 2000 en les funcions de data, una diferència dels que es basaven en eixe moment. Els dialectes poden semblar tan similars que els térmens «JavaScript» i «JScript» a sovint s'utilisen indistintament, pero l'especificació de JScript és incompatible en la d'ECMA en molts aspectes. Per a evitar estes incompatibilitats, el World Wide Web Consortium va dissenyar l'estàndart Document Object Model (DOM, o Model d'Objectes del Document en espanyol), que incorporen Konqueror, les versions 6 d'Internet Explorer i Netscape Navigator, Opera la versió 7, Mozilla Application Suite i Mozilla Firefox des de la seua primera versió.cita requerida
En 1996 els autors varen propondre[12] JavaScript per a que fora adoptat com a estàndar de la European Computer Manufacturers 'Association ECMA, que a pesar del seu nom no és europeu sino internacional, en sèu en Ginebra. En juny de 1997 va ser adoptat com un estàndart ECMA, en el nom d'ECMAScript. Poc despuix també com un estàndart ISO.
JavaScript en el costat servidor
editarNetscape va introduir una implementació de la programació del costat del servidor en Netscape Enterprise Server, llançada en decembre de 1994 (poc despuix dellançament de JavaScript per a navegadors web).[13][14] A partir de mediats de la década dels 2000, hi ha hagut una proliferació d'implementacions de JavaScript per al costat servidor. Node. js és un dels notables eixemples de JavaScript en el costat del servidor, sent usat en proyectes importants.[15][16] Noves implementacions per a eixecutar JavaScript són Deno (escrit principalment en Rust), i Bun (escrit principalment en Zig). Abdós entorns d'eixecució JavaScript poden interpretar TypeScript, i WebAssembly (WASM). [17]
Desenrolls posteriors
editarJavaScript s'ha convertit en un dels llenguages de programació més populars en internet i més usats. Al principi, no obstant, molts desenrolladors renegaven dellenguage perque el públic al que va dirigit ho formaven publicadores d'artículs i demés aficionats, entre atres raons.[18] L'arribada d'AJAX va tornar JavaScript a la fama i va atraure l'atenció de molts atres programadors. Com a resultat d'açò va haver una proliferació d'un conjunt de frameworks i biblioteques d'àmbit general, millorant les pràctiques de programació en JavaScript, i aumentat l'us de JavaScript fòra dels navegadors web, com s'ha vist en la proliferació d'entorns JavaScript del costat del servidor. En giner de 2009, el proyecte CommonJS va ser inaugurat en l'objectiu d'especificar una biblioteca per a us de tasques comunes principalment per al desenroll fora del navegador web.[19]
En juny de 2015 es va tancar i va publicar l'estàndart ECMAScript 6[20][21] en un soport irregular entre navegadors[22] i que dota a JavaScript de característiques alvançades que es trobaven a faltar i que són d'us habitual en atres llenguages com, per eixemple, mòduls per a organisació del còdic, verdaderes classes per a programació orientada a objectes, expressions de flecha, iteradores, generadors o promeses per a programació asíncrona. La versió 7 d'ECMAScript es coneix com ECMAScript 2016,[23] i és l'última versió disponible, publicada en juny de 2016. Es tracta de la primera versió per a la que s'usa un nou procediment de publicació anual i un procés de desenroll obert.[24]
Característiques
editarLes següents característiques són comunes a totes les implementacions que s'ajusten a l'estàndart ECMAScript, a menos que especifique explícitament en cas contrari.
Imperatiu i estructurat
editarJavaScript és compatible en gran part de la estructura de programació de C (per eixemple, sentències if, bucles for, sentències switch, etc.). En una salvetat, en part: en C, el àmbit de les variables alcança al bloc en el qual varen ser definides; no obstant JavaScript no és compatible en açò, ya que l'àmbit de les variables és el de la funció en la qual varen ser declarades. Açò canvia en la versió d'ECMAScript 2015, ya que afig compatibilitat en block scoping per mig de la paraula clau let. Com en C, JavaScript fa distinció entre expressions i sentències. Una diferència sintàctica sobre C és l'inserció automàtica de punt i menge, és dir, en JavaScript els punts i menge que finalisen una sentència poden ser omesos.[25]
Dinàmics
editar- Tipado dinàmic
- Com en la majoria de llenguages de scripting, el tipo està associat al valor, no a la variable. Per eixemple, una variable
xen un moment donat pot estar lligada a un número i més alvance, religada a una cadena. JavaScript és compatible en vàries formes de comprovar el tipo d'un objecte, incloent duck typing.[26] Una forma de saber-ho és per mig de la paraula clautypeof.
- Objetual
- JavaScript està format casi en la seua totalitat per objectes. Els objectes en JavaScript són arrays associatius, millorats en l'inclusió de prototips (vore més alvance). Els noms de les propietats dels objectes són claus de tipo cadena:
obj. x = 10iobj['x'] = 10són equivalents, sent sucre sintàctic la notació en punt. Les propietats i els seus valors poden ser creats, canviats o eliminats en temps d'eixecució. La majoria de propietats d'un objecte (i aquelles que són incloses per la cadena de l'herència prototípica) poden ser enumerades per mig de l'instrucció de buclefor... in. JavaScript té un chicotet número d'objectes predefinits com sónFunctioniDona't.
- Evaluació en temps d'eixecució
- JavaScript inclou la funció
evalque permet evaluar expressions expressades com a cadenes en temps d'eixecució. Per això es recomana queevalsiga utilisat en precaució i que s'opte per utilisar la funcióJSON. parse()en la mida de lo possible, puix pot resultar molt més segura.
Funcional
editar- Funcions de primera classe
- A les funciones se'ls sol cridar ciutadans de primera classe; són objectes en sí mateixos. Com a tal, posseïxen propietats i métodos, com
. call()i. bind().[27] Una funció anidada és una funció definida dins d'una atra. Esta és creada cada volta que la funció externa és invocada. Ademés, cada funció creada forma una clausura; és el resultat d'evaluar un àmbit contenint en una o més variables dependents d'un atre àmbit extern, incloent constants, variables locals i arguments de la funció externa llamante. El resultat de l'evaluació de dita clausura forma part de l'estat intern de cada objecte funció, inclús en acabant de que la funció exterior concloga la seua evaluació.[28]
Prototípico
editar- Prototips
- JavaScript usa prototips en lloc de classes per a l'us d'herència.[29] És possible aplegar a emular moltes de les característiques que proporcionen les classes en llenguages orientats a objectes tradicionals per mig de prototips en JavaScript.[30]
- Funcions com a constructors d'objectes
- Les funcions també es comporten com a constructors. Prefixar una cridada a la funció en la paraula clau
newcrear una nova instància d'un prototip, que hereten propietats i métodos del constructor (incloses les propietats del prototip deObject).[31] ECMAScript 5 oferix el métodoObject. create, permetent la creació explícita d'una instància sense tindre que heretar automàticament del prototip d'Object (en entorns antics pot aparéixer el prototip de l'objecte creat comnull).[32] La propietatprototypedel constructor determina l'objecte usat per al prototip intern dels nous objectes creats. Es poden afegir nous métodos modificant el prototip de l'objecte usat com a constructor. Constructors predefinits en JavaScript, comArrayoObject, també tenen prototips que poden ser modificats. Encara que açò siga possible es considera una mala pràctica modificar el prototip deObjectya que la majoria dels objectes en Javascript hereten els métodos i propietats de l'objecteprototype, objectes els quals poden esperar que estos no hagen segut modificats.[33]
Atres característiques
editar- Entorn d'eixecució
- JavaScript normalment depén de l'entorn en el que s'eixecute (per eixemple, en un navegador web) per a oferir objectes i métodos pels que els scripts poden interactuar en el «món exterior». De fet, depén de l'entorn per a ser capaç de proporcionar la capacitat d'incloure o importar scripts (per eixemple, en HTML per mig del tag
<script>). (Açò no és una característica dellenguage, pero és comú en la majoria de les implementacions de JavaScript.)
- Funcions variádicas
- Un número indefinit de paràmetros poden ser passats a la funció. La funció pot accedir a ells a través dels paràmetros o també a través de l'objecte local
arguments. Les funcions variádicas també poden ser creades usant el método. apply().
- Funcions com a métodos
- A diferència de molts llenguages orientats a objectes, no hi ha distinció entre la definició de funció i la definició de método. Més be, la distinció es produïx durant la cridada a la funció; una funció pot ser cridada com un método. Quan una funció és anomenada com un método d'un objecte, la paraula clau
this, que és una variable local a la funció, representa a l'objecte que va invocar dita funció.
- Arrays i la definició lliteral d'objectes
- De la mateixa manera que molts llenguages de script, arrays i objectes (arrays associatius en atres idiomes) poden ser creats en una sintaxis abreviada. De fet, estos lliterals formen la base del format de senyes JSON.
- Expressions regulars
- JavaScript també és compatible en expressions regulars d'una manera similar a Perl, que proporcionen una sintaxis concisa i poderosa per a la manipulació de text que és més sofisticat que les funcions incorporades als objectes de tipo string.[34]
Extensions específiques del fabricant
editarJavaScript es troba oficialment baix l'organisació de Mozilla Foundation, i periòdicament s'afigen noves característiques dellenguage. No obstant, solament alguns motors JavaScript són compatibles en estes característiques:
- Les propietats
getiset(també compatibles en WebKit, Opera,[35] ActionScript i Rhino).[36] - Clàusules
catchcondicionals. - Protocol iterador adoptat de Python.
- Corrutinas també adoptades de Python.
- Generació de llistes i expressions per comprensió també adoptat de Python.
- Establir l'àmbit a bloc a través de la paraula clau
let. - Desestructuración d'arrays i objectes (forma llimita d'emparejamiento de patrons).
- Expressions concretes en funcions (function(args) expr).
- ECMAScript per a XML (I4X), una extensió que afig compatibilitat nativa XML a ECMAScript.
Sintaxis i semàntica
editarL'última versió de l'estàndart que definix Javascript és ECMAScript 2025. L'estàndart ECMAScript és publicat en juny de cada any per ECMA International baix el còdic ECMA-262.[37]
Eixemples senzills
editarLes variables en JavaScript es definixen usant la paraula clau var:[38]
var x; // definix la variable x, encara que no té cap valor assignat per defecte
var i = 2; // definix la variable i i li assigna el valor 2 a ellaA considerar els comentaris en l'eixemple de dalt, els quals van precedits en 2 barres diagonals. No existixen funcionalitats per a I/O incloses en ellenguage; l'entorn d'eixecució ya ho proporciona. L'especificació ECMAScript en la seua edició 5.1 fa menció:[39]
... en efecte, no existixen recaptes en esta especificació per a entrada de senyes externes o eixida per a resultats computats.
No obstant, la majoria dels entorns d'eixecució té un objecte[40] cridat console que pot ser usat per a imprimir pel fluix d'eixida de la consola de depuració. He ací un simple programa que imprimix «Hello world!»:
console. log("Hello world!");Una funció recursiva:
function factorial(n) {
if (n === 0) {
return 1;
}
return n factorial(n - 1);
}Eixemples de funció anònima (o funció lambda) i una clausura:
var displayClosure = function() {
var count = 0;
return function () {
return ++count;
};
}
var inc = displayClosure();
inc(); // torna 1
inc(); // torna 2
inc(); // torna 3Les expressions en invocació automàtica permeten a les funcions passar-li variables per paràmetro dins de les seues pròpies clausura.
var v;
v = 1;
var getValue = (function(v) {
return function() {return v;};
}(v));
v = 2;
getValue(); // 1Eixemples més alvançats
editarEl següent còdic mostra vàries característiques de JavaScript.
/ Busca el mínim comú múltiple (MCM) de dos números /
function LCMCalculator(x, i) { // funció constructora
var checkInt = function (x) { // funció interior
if (x % 1 !== 0) {
throw new TypeError(x + " no és un sancer"); // llança una excepció
}
return x;
};
this. a = checkInt(x) // punts i menge són opcionals
this. b = checkInt(i);
}
// El prototip de les instàncies d'objecte creats pel constructor és el de la propietat "prototype" del constructor. LCMCalculator. prototype = { // objecte definit com a lliteral
constructor: LCMCalculator, // quan reasignamos un prototip, establim correctament la seua propietat constructor
gcd: function () { // método que calcula el màxim comú divisor
// Algoritme d'Euclides:
var a = Math. abs(this. a), b = Math. abs(this. b), t;
if (a < b) {
// intercanviem variables
t = b;
b = a;
a = t;
}
while (b !== 0) {
t = b;
b = a % b;
a = t;
}
// Solament necessitem calcular el MCD una volta, per lo tant 'redefinim' este método.
// (Realment no és una redefinició—està definida en la pròpia instància, per lo tant
// this. gcd es referix a esta 'redefinició' en lloc de LCMCalculator. prototype. gcd).
// Ademés, 'gcd' === "gcd", this['gcd'] === this. gcd
this['gcd'] = function () {
return a;
};
return a;
},
// Els noms de les propietats de l'objecte poden ser especificats en cadenes delimitades en comillas simples (') o dobles (").
"lcm" : function () {
// Els noms de les variables no colisionen en les propietats de l'objecte. Per eixemple: |lcm| no és |this. lcm|.
// No usar |this. a this. b| per a evitar problemes en càlculs en menge flotant. var lcm = this. a / this. gcd() this. b;
// Només necessitem calcular MCM una volta, per lo tant "redefinim" este método. this. lcm = function () {
return lcm;
};
return lcm;
},
toString: function () {
return "LCMCalculator: a = " + this. a + ", b = " + this. b;
}
};
// Definim una funció genèrica per a imprimir un resultat; esta implementació solament funciona en els navegadors web
function output(x) {
document. body. appendChild(document. createTextNode(x));
document. body. appendChild(document. createElement('br'));
}
// Nota: Els métodos. map() i. forEach() del prototip Array estan definits en JavaScript 1.6.
// Estos métodos són usats ací per a demostrar la naturalea funcional inherent dellenguage.
[[25, 55], [21, 56], [22, 58], [28, 56]]. map(function (pair) { // construcció lliteral d'un Array + funció de mapage. return new LCMCalculator(pair[0], pair[1]);
}). sort(function (a, b) { // ordenem la colecció per mig d'esta funció
return a. lcm() - b. lcm();
}). forEach(function (obj) {
output(obj + ", gcd = " + obj. gcd() + ", lcm = " + obj. lcm());
});El següent eixemple mostra l'eixida que deuria ser mostrada en la finestra d'un navegador.
LCMCalculator: a = 28, b = 56, gcd = 28, lcm = 56
LCMCalculator: a = 21, b = 56, gcd = 7, lcm = 168
LCMCalculator: a = 25, b = 55, gcd = 5, lcm = 275
LCMCalculator: a = 22, b = 58, gcd = 2, lcm = 638Us en pàgines web
editar- Artícul principal → Intérpret de JavaScript.
L'us més comú de JavaScript és escriure funcions embebidas o incloses en pàgines HTML i que interactuen en el Document Object Model (DOM o Model d'Objectes del Document) de la pàgina. Alguns eixemples senzills d'este us són:
- Carregar nou contingut per a la pàgina o enviar senyes al servidor a través d'AJAX sense necessitat de recarregar la pàgina (per eixemple, una ret social pot permetre a l'usuari enviar actualisacions d'estat sense eixir de la pàgina).
- Animació dels elements de pàgina, fer-els desaparéixer, canviar el seu tamany, moure'ls, etc.
- Contingut interactiu, per eixemple, jocs i reproducció d'àudio i vídeo.
- Validació dels valors d'entrada d'un formulari web per a assegurar-se de que són acceptables abans de ser enviat al servidor.
- Transmissió d'informació sobre els hàbits de llectura dels usuaris i les activitats de navegació a varis llocs web. Les pàgines Web en freqüència ho fan per a fer anàlisis web, seguiment d'anuncis, la personalisació o per a atres fins.[41]
Ya que el còdic JavaScript pot eixecutar-se localment en el navegador de l'usuari (en lloc d'en un servidor remot), el navegador pot respondre a les accions de l'usuari en rapidea, fent una aplicació més sensible. Per una atra part, el còdic JavaScript pot detectar accions dels usuaris que HTML per sí sola no pot, com a pulsacions de teclat. Les aplicacions com Gmail s'aprofiten d'açò: la major part de la llògica de l'interfaç d'usuari està escrita en JavaScript, enviant peticions al servidor (per eixemple, el contingut d'un mensage de correu electrònic). La tendència cada volta major per l'us de la programació Ajax explota de manera similar esta tècnica. Un motor de JavaScript (també conegut com a intérpret de JavaScript o implementació JavaScript) és un intérpret que interpreta el còdic font de JavaScript i eixecuta la seqüència de comandos en conseqüència. El primer motor de JavaScript va ser creat per Brendan Eich en Netscape Communications Corporation, per al navegador web Netscape Navigator. El motor, denominat SpiderMonkey, està implementat en C. Des de llavors, ha segut actualisat (en JavaScript 1.5) per a complir en el ECMA-262 edició 3. El motor Rhino, creat principalment per Norris Boyd (abans de Netscape, ara en Google) és una implementació de JavaScript en Java. Rhino, com SpiderMonkey, és compatible en el ECMA-262 edició 3. Un navegador web és, en molt, l'entorn d'acolliment més comú per a JavaScript. Els navegadors web solen crear objectes no natius, dependents de l'entorn d'eixecució, per a representar el Document Object Model (DOM) en JavaScript. El servidor web és un atre entorn comú de servicis. Un servidor web JavaScript sol expondre els seus propis objectes per a representar objectes de petició i resposta HTTP, que un programa JavaScript podria llavors interrogar i manipular per a generar dinàmicament pàgines web. Degut a que JavaScript és l'únic llenguage pel que els més populars navegadors compartixen el seu respal, s'ha convertit en un llenguage al que molts frameworks en atres llenguages compilan, a pesar de que JavaScript no va ser dissenyat per a tals propòsits.[42] A pesar de les llimitacions de rendiment inherents a la seua naturalea dinàmica, l'aument de la velocitat dels motors de JavaScript ha fet d'este llenguage un entorn per a la compilació sorprenentment factible.
Eixemple de script
editarA continuació es mostra un breu eixemple d'una pàgina web (ajustant-se a les normes de l'estàndart per a HTML5) que utilisa JavaScript per al maneig del Document Object Model (DOM):
<! DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Eixemple senzill</title>
</head>
<body>
<h1 aneu="header">Açò és JavaScript</h1>
<script>
document. body. appendChild(document. createTextNode('Hola Món!'));
var h1 = document. getElementById('header'); // conté la referència al tag <h1>
h1 = document. getElementsByTagName('h1')[0]; // accedint al mateix element <h1>
</script>
<noscript>El teu navegador no admet JavaScript, o JavaScript està deshabilitado.</noscript>
</body>
</html>Consideracions sobre la compatibilitat
editar- Artícul principal → Interoperabilidad web.
Degut a que JavaScript s'eixecuta en entorns molt variats, una part important de les proves i la depuració és provar i verificar que el còdic JavaScript funciona correctament en múltiples navegadors. L'interfaç DOM per a accedir i manipular pàgines web no és part de l'estàndart ECMAScript, o de la pròpia JavaScript. El DOM és definit pels esforços d'estandardisació del W3C, una organisació independent. En la pràctica, les implementacions que fan de JavaScript els distints navegadors diferixen tant entre ells mateixos com de les normes de l'estàndart. Per a fer front a estes diferències, els autors de JavaScript varen poder ser capaços d'escriure còdic compatible en els estàndarts que també fora capaç d'eixecutar-se correctament en la majoria dels navegadors, o en el seu defecte, que a lo manco es poguera escriure còdic capaç de comprovar la presència de certes funcionalitats del navegador i que es comportara de manera diferent si no es disponguera de dita funcionalitat.[43] Existixen casos en els que dos navegadors poden aplegar a implementar la mateixa característica, pero en un comportament diferent, fet que als programadors els pot resultar d'ajuda per a detectar qué navegador s'està eixecutant en eixe instant i aixina canviar el comportament de la seua escritura per a que coincidixca.[44][45] Els programadors també solen utilisar biblioteques o ferramentes que tinguen en conte les diferències entre navegadors. Ademés, els scripts poden no funcionar per a alguns usuaris. Per eixemple, un usuari pot:
- Utilisar un navegador antic sense compatibilitat completa en la API DOM,
- Utilisar un navegador PDA o teléfon mòvil que no pot eixecutar JavaScript
- Tindre l'eixecució de JavaScript deshabilitada, com a precaució de seguritat,
- Utilisar un navegador de veu per, per eixemple, una discapacitat visual. Per a recolzar a estos usuaris, els programadors web solen crear pàgines que siguen tolerant de fallos segons l'agent d'usuari (tipo de navegador) que no admeta JavaScript. En particular, la pàgina deu seguir sent útil encara que sense les característiques adicionals que JavaScript hauria afegit. Un enfocament alternatiu que molts troben preferible és primer crear contingut utilisant les tecnologies que funcionen en tots els navegadors, i millorar el contingut per als usuaris que han permés JavaScript.
Accessibilitat
editar- Artícul principal → Accessibilitat web.
Suponent que l'usuari no haja desactivat l'eixecució de còdic JavaScript, en el costat del client JavaScript deu ser escrit tant en el propòsit de millorar les experiències dels visitants en discapacitat visual o física, com el d'evitar ocultar informació a estos visitants.[46]
Els llectors de pantalla, utilisats pels cegos i deficients visuals, poden ser tinguts en conte per JavaScript i aixina poder accedir i llegir els elements DOM de la pàgina. El còdic HTML escrit deu ser lo més conciso, navegable i semánticamente ric possible, tant si JavaScript s'eixecuta com si no. JavaScript no deuria ser totalment depenent dels events de rata del navegador i deuria ser accessible per a aquells usuaris que no vullguen fer us del rata (informàtica) per a navegar o que opten per utilisar solament el teclat. Hi ha events independents del dispositiu, tals com onfocus i onchange que són preferibles en la majoria dels casos.[46]
JavaScript no deu ser utilisat per a crear confusió o desorientación a l'usuari web. Per eixemple, modificar o desactivar la funcionalitat normal del navegador, com canviar la forma en que el botó de navegar cap a arrere o l'event d'actualisació es comporten, són pràctiques que generalment són millors evitar. Igualment, desencadenar events que l'usuari pot no tindre en conte reduïx la sensació de control de l'usuari i provoca canvis inesperats al contingut de la pàgina.[47]
A sovint, el procés de dotar a una pàgina web complexa el major grau accessibilitat possible, es convertix en un problema no trivial a on molts temes s'acaben duent al debat i a l'opinió, sent necessari el compromís de tots fins al final. No obstant, els agents d'usuari i les tecnologies de respal a persones en discapacitat estan en constant evolució i noves directrius i informació al respecte seguixen publicant-se en la web.[46]
Seguritat
editar- Artícul principal → Seguritat del navegador.
JavaScript i el DOM permet que existixquen programadors que facen un us inapropiat per a introduir scripts que eixecuten còdic en contingut maliciós sense el consentiment de l'usuari i que puga aixina comprometre la seua seguritat. Els desenrolladors dels navegadors tenen en conte este risc utilisant dos restriccions. En primer lloc, els scripts s'eixecuten en un sandbox en el que solament es poden portar a terme accions relacionades en la web, no en tasques de programació de propòsit general, com la creació d'archius. En segon lloc, està llimitada per la política del mateix orige: els scripts d'un lloc web no tenen accés a l'informació enviada a un atre sitie web (d'un atre domini) com poguera ser noms d'usuari, contrasenyes o cookies. La majoria dels fallos de seguritat de JavaScript estan relacionats en violacions de qualsevol d'estes dos restriccions. Existixen proyectes com AdSafe o Secure ECMA script (SES) que proporcionen majors nivells de seguritat, en especial en el còdic creat per tercers (tals com els anuncis).[48][49]
La Política de Contingut Segur (CSP) és el método principal previst per a garantisar que solament còdic de confiança puga ser eixecutat en una pàgina web.
Vulnerabilitats cross-site
editar- Artícul principal → Cross-site scripting.
Un problema comú de seguritat en JavaScript és el cross-site scripting o XSS, una violació de la política de mateix orige. Les vulnerabilitats XSS permeten a un atacant injectar còdic JavaScript en pàgines web visitades per l'usuari. Una d'eixes web podria ser la d'un banc, podent l'atacant accedir a l'aplicació de banca en els privilegis de la víctima, lo que podria revelar informació secreta o transferir diners sense l'autorisació de la víctima. Una solució per a les vulnerabilitats XSS és utilisar HTML escaping quan es mostre informació de fonts no confiables. Alguns navegadors inclouen una protecció parcial contra els atacs XSS reflectits (l'atacant està en la mateixa petició web). L'atacant proporciona una URL incloent còdic maliciós. No obstant, inclús els usuaris dels navegadors són vulnerables a atres atacs XSS, tals com aquells en els que el còdic maliciós s'almagasena en una base de senyes. Solament el correcte disseny de les aplicacions Web en la partix servidora pot previndre totalment XSS. Les vulnerabilitats XSS també poden ocórrer per errors d'eixecució pels desenrolladors del navegador.[50]
Una atra vulnerabilitat és la falsificació de petició de lloc creuat o CSRF. En CSRF, el còdic del sitie web atacant enganya al navegador de la víctima, permetent a l'atacant realisar peticions en nom de la víctima, fent impossible saber a l'aplicació de destí (per eixemple, la d'un banc fent una transferència de diners) saber si la petició ha segut realisada voluntàriament per l'usuari o per un atac CSRF. L'atac funciona perque, si elloc de destí fa us únicament de les cookies per a autenticar les solicituts de la víctima, les peticions iniciades pel còdic de l'atacant tindran les mateixes credencials d'accés llegítim que les solicituts iniciades pel propi usuari. En general, la solució a CSRF consistix en introduir un camp de formulari amagat el valor del qual s'utilise per a realisar l'autenticació, i no solament per mig de les cookies, en solicituts que puguen tindre efectes duradors. La comprovació de la capçalera HTTP referer també pot servir d'ajuda.
«Hijacking JavaScript» és un tipo d'atac CSRF en el que una etiqueta <script> en elloc web de l'atacant explota una vulnerabilitat en la pàgina delloc de la víctima que li fa tornar informació privada, en forma de JSON o còdic JavaScript. Les possibles solucions són:
- que es requerixca un token d'autenticació en els paràmetros de les peticions POST i GET per a aquelles peticions que requerixquen tornar informació privada de l'usuari.
- usar POST i mai GET per a solicituts que tornen informació privada
Ferramentes de desenroll
editarEn JavaScript, dispondre d'un depurador es convertix en necessari quan es desenrollen grans aplicacions, no trivials. Ya que pot haver diferències d'implementació entre els diferents navegadors (especialment sobre el DOM), és útil tindre accés a un depurador per a cada u dels navegadors als quals nostra aplicació web anirà dirigit.[51]
Els depuradors web estan disponibles per a Internet Explorer, Firefox, Safari, Google Chrome i Opera.[52]
Existixen tres depuradors disponibles per a Internet Explorer: Microsoft Visual Studio és el més alvançat dels tres, seguit de prop per Microsoft Script Editor (un component de Microsoft Office)[53] i, finalment, Microsoft Script Debugger, que és molt més bàsic que l'atre dos, encara que és gratuït. El IDE gratuït Microsoft Visual Web Developer Express oferix una versió llimitada de la funcionalitat de depuració de JavaScript en el Microsoft Visual Studio. Internet Explorer ha inclós ferramentes de desenroll des de la versió 8 (es mostra pulsant la tecla F12). Les aplicacions web dins de Firefox es poden depurar usant el Firebug add-on o l'antic depurador Venkman. Firefox també té integrada una consola d'errors bàsica, que registra i evalua JavaScript. També registra errors de CSS i advertències. Opera inclou un conjunt de ferramentes cridat Dragonfly.[54] L'Inspector Web de WebKit inclou un depurador de JavaScript[55] utilisat en Safari, junt en una versió modificada de Google Chrome. Existixen algunes ferramentes d'ajuda a la depuració, també escrites en JavaScript i construïdes per a eixecutar-se en la Web. Un eixemple és el programa JSLint, desenrollat per Douglas Crockford, qui ha escrit extensament sobre ellenguage. JSLint analisa el còdic JavaScript per a que este quede conforme en un conjunt de normes i directrius i que asseguren el seu correcte funcionament i mantenibilidad. Hi ha frameworks de programació com PaulaJS que oferix funcions per a realisar sistemes de frontend en més utilitats que no cal programar directament, millores en estètica i experiència d'usuari.
Vore també
editarReferències
editar- ↑ «archive. org/web/20150412040502/http://www. ecma-international. org/publications/files/ECMA-ST/ECMA-262.pdf Copia archivada». Archivat des d'el ecma-international. org/publications/files/ECMA-ST/ECMA-262.pdf original, el 12 d'abril de 2015. Consultat el 23 de novembre de 2010.
- ↑ «mozilla. org/es/docs/Web/JavaScript JavaScript». Mozilla Developer Network. Consultat el 16 de setembre de 2016.
- ↑ «mozilla. org/en-US/docs/Web/JavaScript/About_JavaScript About JavaScript - JavaScript | MDN» (en en-us). developer. mozilla. org. Consultat el 2022-07-04.
- ↑ «stanford. edu/class/cs98si/slides/overview. html Introduction». web. stanford. edu. Consultat el 2022-07-04.
- ↑ «archive. org/web/20130826220148/https://mail. mozilla. org/pipermail/es-discuss/2008-August/003400. html ECMAScript Harmony». Archivat des d'el mozilla. org/pipermail/es-discuss/2008-August/003400. html original, el 26 d'agost de 2013. Consultat el 22 de juliol de 2015.
- ↑ «campusmvp. es/recursos/post/ECMAScript-6-es-ya-un-estandar-cerrado. aspx ECMAScript 6 és ya un estàndart obert». Consultat el 22 de juliol de 2015.
- ↑ webdevelopersnotes. com/basics/languages_on_the_internet. php3 Llenguages de programació usats en Internet i la World Wide Web (WWW) (castellà)
- ↑ oreilly. com/product/9780596805531. do JavaScript: The Definitive Guide, 6th Edition
- ↑ «uspto. gov/ Trademark Status & Document Retrieval». tsdr. uspto. gov. Consultat el 2024-03-25.
- ↑ oracle. com/us/legal/third-party-trademarks/index. html Marques registrades d'Oracle.
- ↑ «mozilla. org/en-US/docs/Web/JavaScript/About_JavaScript? redirectlocale=en-US&redirectslug=JavaScript%2FAbout_JavaScript About JavaScript» (en anglés). Consultat el 29 d'agost de 2013. «JavaScript is a trademark or registered trademark of Oracle in the O. S. and other countries»
- ↑ «archive. org/web/19981203070212/http://cgi. netscape. com/newsref/pr/newsrelease289. html Netscape Comunicat de prensa (castellà)». Archivat des d'el netscape. com/newsref/pr/newsrelease289. html original, el 3 de decembre de 1998. Consultat el 13 de setembre de 2008.
- ↑ «oracle. com/cd/E19957-01/816-6411-10/getstart. htm Server-Side JavaScript Guide». Netscape Communications Corporation. Consultat el 25 d'abril de 2012.
- ↑ Mike Morgan. «archive. org/web/20121221071020/http://vampire. rulez. org/onlinedoc/book/NetscapeLiveWire/ch6. htm Using Netscape™ LiveWire™, Special Edition». Que. Archivat des d'el rulez. org/onlinedoc/book/NetscapeLiveWire/ch6. htm original, el 21 de decembre de 2012. Consultat el 19 de maig de 2013.
- ↑ «archive. org/web/20120602170854/http://www. readwriteweb. com/archives/server-side_javascript_back_with_a_vengeance. php Server-Side Javascript: Back With a Vengeance». Read Write Web. Archivat des d'el readwriteweb. com/archives/server-side_javascript_back_with_a_vengeance. php original, el 2 de juny de 2012. Consultat el 28 de maig de 2012.
- ↑ «org/about/ Node's goal is to provide an easy way to build scalable network programs». About Node. js. Joyent.
- ↑ «deno. com/ Deno: the easiest, most secure JavaScript runtime | Deno Docs». docs. deno. com. Consultat el 2024-08-12.
- ↑ «crockford. com/javascript/javascript. html JavaScript: The World's Most Misunderstood Programming Language». Crockford. com. Consultat el 19 de maig de 2009.
- ↑ Kris Kowal. «com/web/news/2009/12/commonjs-effort-sets-javascript-on-path-for-world-domination. ars CommonJS effort sets JavaScript on path for world domination». Ars Technica. Condé Nast Publications. Consultat el 18 d'abril de 2010.
- ↑ ECMA International. «ecma-international. org/publications/standards/Ecma-262. htm Standard ECMA-262 6th Edition».
- ↑ campusMVP. «campusmvp. es/recursos/post/ECMAScript-6-es-ya-un-estandar-cerrado. aspx ECMAScript 6 ya és un estàndart tancat». Consultat el 22 de juliol de 2015.
- ↑ «archive. org/web/20201022231752/http://kangax. github. io/compat-table/es6/ Taula de compatibilitat de navegadors en ECMAScript 6 (Inglés)». Archivat des d'el github. io/compat-table/es6/ original, el 22 d'octubre de 2020. Consultat el 22 de juliol de 2015.
- ↑ ECMA International. «ecma-international. org/publications/standards/Ecma-262. htm Standard ECMA-262 7th Edition».
- ↑ ECMA International. «ecma-international. org/ecma-262/7.0/index. html ECMAScript 2016 Language Specification».
- ↑ Flanagan, 2006, p. 16.
- ↑ Flanagan, 2006, pp. 176–178.
- ↑ «archive. org/web/20130128185825/http://es5. github. com/#x15.3.4-toc Properties of the Function Object». Archivat des d'el github. com/#x15.3.4-toc original, el 28 de giner de 2013. Consultat el 19 de maig de 2013.
- ↑ Flanagan, 2006, p. 141.
- ↑ «mozilla. org/en-US/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain Inheritance and the prototype chain». Mozilla Developer Network. Mozilla. Consultat el 6 d'abril de 2013.
- ↑ Herman, David (2013). org/details/effectivejavascr0000herm Effective Javascript, Addison-Wesley, p. org/details/effectivejavascr0000herm/page/83 83. ISBN 9780321812186.
- ↑ Haverbeke, Marjin (2011). org/details/eloquenjavascri00have_492 Eloquent Javascript, No Starch Press, pp. org/details/eloquenjavascri00have_492/page/n102 95-97. ISBN 9781593272821.
- ↑ «com/2011/08/12/understanding-prototypes-in-javascript/ Understanding "Prototypes" in JavaScript». Consultat el 6 d'abril de 2013.
- ↑ Herman, David (2013). org/details/effectivejavascr0000herm Effective Javascript, Addison-Wesley, pp. org/details/effectivejavascr0000herm/page/125 125-127. ISBN 9780321812186.
- ↑ Haverbeke, Marijn (2011). org/details/eloquenjavascri00have_492 Eloquent JavaScript, No Starch Press, pp. org/details/eloquenjavascri00have_492/page/n146 139-149. ISBN 978-1593272821.
- ↑ Robert Nyman, com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/ Getters And Setters With JavaScript – Code Samples And Donem, published 29 May 2009, accessed 2 January 2010.
- ↑ John Resig, org/blog/javascript-getters-and-setters/ JavaScript Getters and Setters, 18 July 2007, accessed 2 January 2010
- ↑ http://www. ecma-international. org/publications/standards/Ecma-262. htm
- ↑ «mozilla. org/en-US/docs/JavaScript/Reference/Statements/var var - JavaScript - MDN». The Mozilla Developer Network. Consultat el 22 de decembre de 2012.
- ↑ «ecma-international. org/ecma-262/5.1/#sec-4 ECMAScript Language Specification - ECMA-262 Edition 5.1». Ecma International. Consultat el 22 de decembre de 2012.
- ↑ «mozilla. org/en-US/docs/DOM/console console». Mozilla Developer Network. Mozilla. Consultat el 6 d'abril de 2013.
- ↑ «archive. org/web/20131031182703/http://piwik. org/docs/javascript-tracking/ JavaScript tracking - Piwik». Piwik. Archivat des d'el org/docs/javascript-tracking/ original, el 31 d'octubre de 2013. Consultat el 31 de març de 2012.
- ↑ «computerworld. com. au/artícul/255293/-z_programming_languages_javascript The A-Z of Programming Languages: JavaScript». computerworld. com. au.
- ↑ Peter-Paul Koch, quirksmode. org/js/support. html Object detection
- ↑ Peter-Paul Koch, evolt. org/node/23335 Mission Impossible - mouse position evolt. org/node/23335 archivat en Wayback Machine.
- ↑ Peter-Paul Koch, quirksmode. org/js/detect. html Browser detect
- ↑ 46,0 46,1 46,2 Flanagan, 2006, pp. 262–263.
- ↑ «webaim. org/techniques/javascript/ Creating Accessible JavaScript». WebAIM. Consultat el 8 de juny de 2010.
- ↑ adsafe. org/ ADsafe - Making JavaScript Safe for Advertising
- ↑ google. com/p/es-lab/wiki/SecureEcmaScript Secure ECMA Script (SES)
- ↑ MozillaZine, mozillazine. org/talkback. html? artícul=4392 Mozilla Cross-Site Scripting Vulnerability Reported and Fixed
- ↑ «alistapart. com/artículs/advanced-debugging-with-javascript/ Advanced Debugging With JavaScript». alistapart. com. Consultat el 28 de maig de 2010.
- ↑ «archive. org/web/20160408185418/http://javascript. about. com/od/problemsolving/ig/JavaScript-Debugging/ The JavaScript Debugging Console». javascript. about. com. Archivat des d'el about. com/od/problemsolving/ig/JavaScript-Debugging/ original, el 8 d'abril de 2016. Consultat el 28 de maig de 2010.
- ↑ microsoft. com/en-us/library/aa202668(office.11). aspx JScript development in Microsoft Office 11 (MS InfoPath 2003)
- ↑ «webcitation. org/618EWbOQ4? url=http://www. opera. com/dragonfly/ Opera DragonFly». Opera Software. Archivat des d'el opera. com/dragonfly/ original, el 22 d'agost de 2011. Consultat el 19 de maig de 2013.
- ↑ «org/blog/61/introducing-drosera/ Introducing Drosera - Surfin' Safari». Webkit. org. Consultat el 19 de maig de 2009.
Enllaços externs
editar- mozilla. org/es/docs/Web/JavaScript Mozilla Developer Center.
- (anglés) w3schools. com/js/ Javascript tutorial.
- archive. org/web/20220327060138/https://reanimandowebs. com/articulos-sobre-programacion-web/javascript/ JavaScript - Mirant despuix de les bambalinas.
- buscaminegocio. com/cursos-de-javascript/index. html Curs de JavaScript debades.
Referències
editar
- Este artícul conté una traducció derivada de «JavaScript» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.