¿Qué debería saber todo programador JavaScript? [cerrado]


¿Hay un conjunto de cosas que todo programador JavaScript debería saber para poder decir "Conozco JavaScript"?

Author: gath, 2010-04-13

30 answers

No jQuery. YUI no. No, etc. sucesivamente.)

Los frameworks pueden ser útiles, pero a menudo están ocultando los detalles a veces desagradables de cómo JavaScript y el DOM realmente funcionan. Si su objetivo es ser capaz de decir "sé JavaScript", entonces invertir mucho tiempo en un marco se opone a eso.

Aquí hay algunas características del lenguaje JavaScript que debe saber para grok lo que está haciendo y no quedar atrapado, pero que no son inmediatamente obvias para muchos personas:

  • Que object.prop y object['prop'] son la misma cosa (así que puedes dejar de usar eval, gracias); que las propiedades del objeto son siempre cadenas (incluso para matrices); qué for...in es a (y lo que no es).

  • Propiedad-olfateando; qué es undefined (y por qué huele ); por qué el aparentemente poco conocido in operador es beneficioso y diferente de typeof/undefined controles; hasOwnProperty; el propósito de delete.

  • Que el tipo de datos Number es realmente un flotador; las dificultades independientes del lenguaje de usar flotadores; evitando la trampa octal parseInt.

  • Ámbito de la función anidada; la necesidad de usar var en el ámbito que desea evitar globales accidentales; cómo se pueden usar los ámbitos para cierres; el problema del bucle de cierre .

  • Cómo las variables globales y las propiedades window chocan; cómo las variables globales y los elementos del documento no deberían colisionar pero hacer en IE; la necesidad de utilizar var en el ámbito global también para evitar esto.

  • Cómo actúa la instrucción function para 'hoist' una definición antes del código que la precede; la diferencia entre las instrucciones de función y las expresiones de función; por qué las expresiones de función nombradas no deben usarse.

  • Cómo funcionan realmente las funciones del constructor, la propiedad prototype y el operador new; métodos de explotar esto para crear sistema normal de clase / subclase / instancia que realmente quería; cuando es posible que desee usar objetos basados en cierres en lugar de prototipos. (La mayoría del material tutorial de JS es absolutamente terrible en esto;me llevó años ponerlo en mi cabeza.)

  • Cómo this se determina en el tiempo de llamada, no enlazado; cómo consecuentemente el paso de métodos no funciona como se espera de otros lenguajes; cómo closures o Function#bind se pueden usar para sortear eso.

  • Otros Características de ECMAScript Fifth Edition como indexOf, forEach y los métodos de programación funcional en Array; cómo arreglar navegadores antiguos para asegurarse de que puede usarlos; usándolos con expresiones de función anónimas en línea para obtener un código compacto y legible.

  • El flujo de control entre el navegador y el código de usuario; ejecución síncrona y asíncrona; eventos que se activan dentro del flujo de control (por ejemplo. enfoque) vs. eventos y tiempos de espera que ocurren cuando el control regresa; cómo llamar a un builtin supuestamente sincrónico como alert puede terminar causando una reentrancia potencialmente desastrosa.

  • Cómo el scripting entre ventanas afecta a instanceof; cómo el scripting entre ventanas afecta al flujo de control a través de diferentes documentos; cómo postMessage se espera que solucione esto.

Ver esta respuesta con respecto a los dos últimos puntos.

Por encima de todo, debe ver JavaScript críticamente, reconociendo que es por razones históricas un lenguaje imperfecto (incluso más que la mayoría de los idiomas), y evitando sus peores lugares problemáticos. Definitivamente vale la pena leer el trabajo de Crockford en este frente (aunque no estoy 100% de acuerdo con él en cuáles son las "Partes Buenas").

 590
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:40

Que se puede desactivar.

 248
Author: graphicdivine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:42:20

Entender el material escrito en el Javascript de Crockford : Las Partes Buenas es una suposición bastante buena de que una persona es un programador JS decente.

Puede saber cómo usar una buena biblioteca como jQuery y aún no conocer las partes ocultas de Javascript.

Otra nota es las herramientas de depuración en varios navegadores. Un programador JS debe saber cómo depurar su código en diferentes navegadores.

Oh! ¡Y saber que JSLint herirá totalmente tus sentimientos!!

 75
Author: bron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-15 16:07:29

Si quieres ser un verdadero ninja de JavaScript, debes conocer las respuestas a cada pregunta en el Cuestionario Perfección mata JavaScript.

Un ejemplo para abrir el apetito:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

¿Qué devuelve esta expresión?

  • "número"
  • "indefinido"
  • ,"función"
  • Error
 49
Author: Skilldrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 11:36:14

No sabes JavaScript si no sabes:

  1. Cierres
  2. Herencia basada en prototipos
  3. El patrón del módulo
  4. El W3C-DOM
  5. Cómo funcionan los eventos
 46
Author: edwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 07:29:00

..que javascript no es java:)

Muchas, muchas personas que comienzan con el desarrollo de sitios web me han dicho que javascript es simplemente java.

 37
Author: Sripathi Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:19:10
  1. Familiarícese con al menos una biblioteca Javascript ( Jquery, Prototype, etc. ).

  2. Aprende a usar las herramientas de depuración de los principales navegadores (MSIE 7-8, Firefox, Chrome, Safari)

  3. Lea sobre la industria: el sitio web de Douglas Crockford es un tesoro Ajaxian.com es un buen blog para mantenerse al día con ideas nuevas, interesantes y / o extrañas para Javascript. Hay una serie de otros recursos, pero esos son los que me ayudaron a la mas.

 27
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:21:43

Javascript objects and function as first-class citizen, callbacks , no olvidarse de eventos y luego jQuery.

 24
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:29:08

Que Javascript no es algo que se puede aprender en una hora!

 24
Author: Ashwin Prabhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 19:34:56

Las variables son globales a menos que se declare que son locales!!

Bad (doSomething() solo se llama 10 veces):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Bueno (doSomething() se llama 50 veces según lo previsto):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
 23
Author: theycallmemorty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-16 20:54:59
 20
Author: Daniel Vassallo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:18:22

Para saber que Javascript se llamaba originalmente LiveScript y el prefijo 'Java' se adjuntó con fines de marketing, no porque Java y Javascript estén relacionados (que no lo están).

Oh y por poseer cualquier versión de David Flanagan 'Javascript: The Definitive Guide' (esta información está en la página 2).

... y para apreciar a los que han ido antes en tratar de ofuscar el documento de Internet Explorer 4.todos [] y Netscape Navigator 4 documento.capas[] antes de que los gustos de Jquery quitaron el dolor.

EDITAR:

Como @Kinopiko señala JavaScript fue llamado proyecto Mocha originalmente ( algunas fuentes también reconocen que fue llamado proyecto LiveWire) pero es generalmente aceptado que el lenguaje (escrito por Brendan Eich) fue programado para ser lanzado como LiveScript antes de que el prefijo de Java fuera adoptado en el lanzamiento a principios de 1996.

 8
Author: amelvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 11:16:57

Uno debe tener en cuenta lo siguiente para decir "Conozco JavaScript":

  1. JavaScript es bueno pero DOM es punto de dolor
  2. Problemas de navegador cruzado puede hacer que te vuelvas loco
  3. A menos que el código sea probado en al menos 4 buenos navegadores diferentes no se puede decir que esté libre de errores
  4. Cierre.............. Debe saber
  5. Su prototipo basado ........... Bonito es divertido aprender esto
  6. depurador palabra clave ..... Ayudar en crisis
 8
Author: Anil Namde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-19 17:43:57

Que JavaScript es mucho más diferente de otros lenguajes de lo que podría pensar. Mira esta gran charla de tecnología de Google para obtener una impresión: http://www.youtube.com/watch?v=hQVTIJBZook

 7
Author: ericteubert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:18:02

¿Qué debería saber todo programador javascript?

¿Qué tal, puedo desactivar sus esfuerzos con 2 clics. Así que proporcione una alternativa si es posible.

 7
Author: Khainestar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 08:21:53

Recomiendo encarecidamente leer Javascript: Las Partes Buenas

 6
Author: Sungguk Lim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-14 07:15:17

Conoce javascript si puede usar Array, Number, String, Date y Object de manera efectiva. Más puntos para Matemáticas y expresiones regulares. Debería ser capaz de escribir funciones y usar variables (en el ámbito correcto, es decir, como 'métodos' de un objeto).

Veo algunos comentarios sobre conocer cierres, sintaxis de funciones extravagantes, blabla. Todo eso es irrelevante para esta pregunta. Eso es como decir que eres un corredor si puedes correr el 100m dash en menos de 11 segundos.

Yo digo que se necesita tal vez un par de semanas para ser competente en javascript. Después de eso se necesitan años y docenas de libros y miles de líneas de programación para convertirse en un experto, un ninja, etc.

Pero esa no era la pregunta.

Oh, y el DOM no es parte de javascript, y tampoco lo es jQuery. Así que creo que ambos son igualmente irrelevantes para la pregunta también.

 6
Author: Michiel van der Blonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 17:39:18
 4
Author: Richard Inglis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 14:38:16

Habiendo leído todo lo anterior, también es perfectamente bien para aprender Javascript mediante el uso de un marco como jQuery. La verdad es que es la primera forma en que mucha gente eligió a JS en primer lugar. No hay vergüenza en eso.

 4
Author: Soup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 07:24:23

array .length el método no es un recuento de elementos del array, sino el índice más alto. incluso cuando el elemento se estableció en undefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

Este comportamiento es apenas distinguible de un error de diseño de lenguaje..

 4
Author: mykhal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-02 22:56:49

JQuery sería mi mejor recomendación. No solo por el código en sí, es el modismo, el estilo, el pensamiento detrás de él lo que es más digno de emulación.

 3
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:15:58

Que javascript es el lenguaje más ampliamente desplegado en el mundo. (Probablemente)

 3
Author: zaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:30:23

Aprender un idioma realmente bien y comprender sus diversas peculiaridades proviene de (años de) experiencia. Si quieres ser un mejor programador, yo diría, entender los patrones de diseño, cómo y cuándo usarlos y / o incluso cuando los estás usando sin darte cuenta; arquitectura técnica y experiencia de usuario.

Conocer el lenguaje (JavaScript) significa que puede tomar cualquier framework y usarlo a voluntad. Inevitablemente tendrá que sumergirse en el código fuente, y si todo lo que sabe es la sintaxis de un marco o 2 o 3, entonces usted no va a ir muy lejos. Al decir eso, entrar en el código fuente de algunos marcos diferentes es probablemente una de las mejores maneras de ver cómo se puede usar JavaScript. Jugando con el paso a través del código en Firebug o Web Inspector, a continuación, comprobar la documentación de JavaScript, especialmente los documentos de Mozilla y Webkit, para obtener una mayor comprensión de lo que está mirando.

Entender la diferencia entre la Programación Orientada a Objetos y Funcional, que JavaScript es una mezcla sexy de los dos y cuándo y cómo usar ambos para crear una base de código asesina y aplicaciones impresionantes te harán un mejor programador de JavaScript.

Simplemente leyendo algunos libros, especialmente "good parts" de Crockford, que simplemente presenta sus opiniones sobre lo que es bueno en JavaScript, mientras que saltarse la mayoría de las partes IMPRESIONANTES de JavaScript va a empezar con el pie izquierdo.

Revisar el código escrito por alguien como Thomas Fuchs por otro lado va a le dará mucha más información sobre el poder de escribir JavaScript increíble y eficiente.

Tratar de memorizar algunos gotchas o WTFs tampoco va a ayudar mucho, lo aprenderá si comienza a codificar y pasar por el código de una biblioteca/ frameworks, especialmente uno comentado, para ver por qué han utilizado ciertas propiedades/ valores y no otros por qué y cuándo es bueno usar operandos y operadores específicos, todo esto está ahí en el código de la gente del framework. Cuan mejor que aprender con el ejemplo? :^)

 3
Author: christos constandinou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-23 15:35:45

En Javascript, el rendimiento importa.

No hay un compilador inteligente para optimizar su código, por lo que debe tener más cuidado mientras escribe código javascript que lenguajes como C#, Java...

 2
Author: mcaaltuntas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-15 16:49:42

Object literals porque son muy agradables de escribir.

 1
Author: poo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 11:18:29

Las siguientes cosas también son importantes:

1) Elevación variable. 2) Cadenas de alcance y objetos de activación.

Y luego cosas como estas::)

3) wtfjs.com

4) todo es un objeto http://www.lifeinafolder.com/images/Js.jpg

 0
Author: Rajat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 03:57:25
  1. Sabiendo que hay una vida con y sin with() y dónde trazar la línea.
  2. Puede crear errores personalizados con la instrucción throw para detener deliberadamente el tiempo de ejecución de javascript.
 0
Author: FK82,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-01 13:06:47

JavaScript no es compatible con la separación de return keyword y return statement con carácter de nueva línea como el siguiente código (o inténtelo en mi página jsFiddle)

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

No entiendo por qué JavaScript no soporta este estilo porque es mucho más fácil leer código fuente JavaScript muy complejo cuando se compara con el estilo predeterminado de JavaScript.

PS. He escrito JavaScript casi 6 años. Pero acabo de encontrar este error conmigo mismo cuando intento ejecutar el función siguiente. Siempre devuelve undefined. Cuando uso debugger y paso a esta función todo funciona bien. Creo que debería ser el peor error de programación en mi vida.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
 -1
Author: Soul_Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-03 11:16:11

Dado que JS es un lenguaje funcional, un programador JS decente debe ser capaz de escribir Y-combinator y explicar cómo funciona desde la parte superior de la cabeza.

 -3
Author: user187291,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 10:28:32

... acerca de Google Web Toolkit , lo que significa que su proyecto javascript probablemente podría desarrollarse de una manera mucho más conveniente.

 -5
Author: Viktor Sehr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-14 07:05:07