¿Qué debe saber todo programador de JavaScript? [cerrado]

368

¿Hay un conjunto de cosas que todo programador de JavaScript debe saber para poder decir "Sé JavaScript"?

gath
fuente

Respuestas:

590

No jQuery. No YUI No (etc. etc.)

Los marcos pueden ser útiles, pero a menudo ocultan los detalles a veces feos de cómo JavaScript y el DOM realmente funcionan para usted. Si su objetivo es poder decir "Sé JavaScript", entonces invertir mucho tiempo en un marco se opone a eso.

Aquí hay algunas características del lenguaje JavaScript que debe conocer para entender lo que está haciendo y no quedar atrapado, pero que no son obvias para muchas personas:

  • Eso object.propy object['prop']son lo mismo (así que puedes dejar de usar eval, gracias); que las propiedades del objeto son siempre cadenas (incluso para matrices); para qué for... ines (y para qué no es ).

  • Oler la propiedad; qué undefinedes (y por qué huele ); por qué el inoperador aparentemente poco conocido es beneficioso y diferente de typeof/ undefinedverifica; hasOwnProperty; El propósito de delete.

  • Que el Numbertipo de datos es realmente un flotador; las dificultades de usar flotadores independientes del idioma; evitando la parseInttrampa octal.

  • Alcance anidado de la función; la necesidad de usar varen el ámbito de aplicación que desea evitar globalidades accidentales; cómo se pueden usar los ámbitos para los cierres; El problema del ciclo de cierre .

  • Cómo windowcolisionan las variables y propiedades globales ; cómo las variables globales y los elementos del documento no deberían colisionar sino en IE; La necesidad de usar varen el ámbito global también para evitar esto.

  • Cómo functionactúa la declaración para ' izar ' una definición antes del código que la precede; la diferencia entre declaraciones de funciones y expresiones de funciones; por qué no se deben usar expresiones de funciones con nombre .

  • Cómo funciona realmente el constructor, la prototypepropiedad y el newoperador realmente funcionan; métodos para explotar esto para crear el sistema normal de clase / subclase / instancia que realmente quería; cuando desee utilizar objetos basados ​​en el cierre en lugar de crear prototipos. (La mayoría del material de tutoría de JS es absolutamente terrible en esto; me tomó años aclararlo).

  • Cómo thisse determina en el momento de la llamada, no vinculado; cómo, en consecuencia, la transferencia de métodos no funciona como espera de otros idiomas; cómo los cierres o Function#bindse pueden usar para evitar eso.

  • Otras características de ECMAScript Fifth Edition como indexOf, forEachy los métodos deArray programación funcional en ; cómo reparar navegadores antiguos para garantizar que pueda usarlos; usándolos con expresiones de funciones 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 (p. ej., foco) versus eventos y tiempos de espera que ocurren cuando el control regresa; cómo llamar a un edificio supuestamente sincrónico alertpuede terminar causando un reencuentro potencialmente desastroso.

  • Cómo afecta la secuencia de comandos de ventanas cruzadas instanceof; cómo las secuencias de comandos de ventana cruzada afectan el flujo de control a través de diferentes documentos; ¿Cómo postMessagese solucionará esto?

Vea esta respuesta con respecto a los últimos dos elementos.

Sobre todo, debe ver JavaScript de manera crítica, reconociendo que es por razones históricas un idioma imperfecto (incluso más que la mayoría de los idiomas) y evitando sus peores problemas. El trabajo de Crockford en este frente definitivamente vale la pena leerlo (aunque no estoy 100% de acuerdo con él en lo que son las "partes buenas").

bobince
fuente
80
Ahhhh, finalmente una respuesta reflexiva y minuciosa. Si pudiera +10, lo haría. Conocer un marco no significa que pueda programar JavaScript de manera efectiva.
Tim Down
66
Muchas gracias por esa respuesta bien pensada. Me gustaría agregar que usar un marco puede ser realmente beneficioso si sabes cómo se está haciendo. Debes aprender a hacer esas cosas por ti mismo antes de recurrir a un marco.
Javier Parra
44
@Daniel: en realidad no es así, thisestá vinculado de cualquier manera que acceda a él. Pruébalo:, var o= {b: function(){alert(this===o);}};luego o['b']();-> true. Y si quieres realmente extraño, (o['b'])()-> true, pero (c= o['b'])()-> false, y solo en Mozilla, (true? o['b'] : null)()-> true. W, T y, de hecho, F.
bobince
77
¡Que tonteria! No es que conocer todas las peculiaridades del navegador te haga un mejor codificador de JS. Tal vez más credibilidad callejera entre sus compañeros ... Las abstracciones hacen la vida más fácil y son una parte esencial de JS, por lo que diría que conocer un marco lo convierte en un mejor codificador de JS que uno que no lo hace y quiere hacer las cosas a la larga.
Vince Panuccio
19
Sir Psycho: tenga en cuenta que ninguna de estas respuestas menciona el DOM, que es lo que las grandes bibliotecas están allí para ayudarlo. Un marco no puede protegerlo de ninguna de las cosas mencionadas aquí . Esto es importante para cualquiera que esté haciendo scripts de navegador, usando un framework o no.
Tim Down
248

Que se puede deshabilitar.

graphicdivine
fuente
12
+1, estoy tan cansado de las páginas que ni siquiera se molestan con los conceptos básicos de degradación elegante porque "es muy difícil y todos tienen habilitado JavaScript de todos modos".
wasatz
27
+1. Una página que no funciona sin JavaScript es una página que será frágil incluso con JS habilitado.
bobince
99
@iconiK Simplemente iré y le diré a todos mis clientes gubernamentales que tienen JavaScript deshabilitado globalmente por razones de seguridad que todos son imbéciles, ¿de acuerdo?
graphicdivine
16
-1 esto está fuera de tema y realmente no tiene nada que ver con saber acerca de JavaScript como lenguaje. Es bueno tener en cuenta al diseñar una aplicación web, pero aún no es una respuesta que pertenece a este hilo.
TM.
24
@ TM, no, realmente es una consideración importante. Esto debe estar en su mente cuando pruebe los valores antes de insertarlos en la base de datos o tenga la única forma de iniciar sesión en su sitio web a través de un elegante cuadro emergente de JavaScript. Hablando de eso ... creo que necesito ir a revisar algo.
Elizabeth Buckwalter
75

Comprender las cosas escritas en Javascript de Crockford : The Good Parts 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 son las herramientas de depuración en varios navegadores. Un programador de JS debe saber cómo depurar su código en diferentes navegadores.

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

bron
fuente
+1 Sigue olvidándote de ese libro, excelente recomendación.
David
8
También hay muchos videos instructivos y perspicaces de Crockford en developer.yahoo.com/yui/theater , y creo que no necesito mencionar crockfordfacts.com :-)
ndim
+1: JSLint es algo maravilloso cuando intentas desarrollar JS para un marco que no tiene soporte de depuración incrustado ( tos Siebel, tos PDFs).
J. Polfer
49

Si quieres ser un verdadero ninja de JavaScript, debes saber las respuestas a cada pregunta en el Perfection kills JavaScript Quiz .

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
Drilldrick
fuente
10
Eche un vistazo a mis respuestas: codingspot.com/2010/02/…
CMS
@CMS ¡Muy bien! ¿Realmente entendiste bien la primera vez, o esto incluye alguna investigación?
Skilldrick el
77
Destreza: Creo que los obtuve todos por primera vez, soy un lector frecuente del estándar ECMA-262 (lo sé, soy un bicho raro :-)
CMS
46

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
edwin
fuente
Realmente me gusta esta respuesta. Le ayuda a detectar áreas oscuras en su conocimiento. Los eventos son lo único que aún me resulta un tanto oscuro en esta lista de verificación (si el patrón del módulo significa "no golpear el espacio de nombres global" y, por lo tanto, incluye ámbitos y el operador var).
silviot
11
Yo diría eso You don't know JavaScript if you don't know The W3C-DOM. Las dos cosas son diferentes.
gblazex
37

..que javascript no es java :)

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

Sripathi Krishnan
fuente
+1 ¡Este punto es bastante fundamental!
amelvin
71
"JavaScript es para Java como la alfombra es para el automóvil".
Josh Lee
1
Javascript es casi tan similar a Java como C # es similar a C. Seguro que la sintaxis se ve un poco similar, pero muy diferente.
Earlz
44
a menos que utilicen Google Web Toolkit
Afriza N. Arief
Curiosamente, Microsoft basó las funciones de fecha compatibles con Y2k en JScript para IE3 en java.util.Date.
Bayard Randel
27
  1. Familiarícese con al menos una biblioteca de Javascript (Jquery, Prototype, etc.).

  2. Aprenda a utilizar 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 escondido, mientras que Ajaxian.com es un buen blog para mantenerse al día con ideas nuevas, interesantes o extrañas para Javascript. Hay otros recursos, pero esos son los que más me ayudaron.

David
fuente
En serio, ¿por qué el voto negativo?
David
+1 Demasiado voto táctico, en serio la gente debería votar las buenas respuestas, no solo tratar de hacer que su respuesta llegue a la cima.
amelvin
1
@Murali VP Supuse que "conocía" Javascript en el contexto de los navegadores. Inmediatamente después de algún equivalente de hello world, necesitará descubrir sus errores lógicos y de tiempo de ejecución, que pueden ser diferentes por intérprete. No afirmaría saber ningún idioma si no supiera cómo depurarlo. En cuanto a un requisito de marco, Javascript es algo así como los primeros C, donde las sutiles diferencias de implementación sabotearán a los incautos; jQuery y prototypejs pasan por alto estas diferencias y hacen que Javascript sea una herramienta confiable al tiempo que agrega llamadas API adicionales para aumentar la productividad. (cont)
David
@Murali VP Para ser justos, Javascript ha recorrido un largo camino desde que comencé a usarlo en los años 90 y, con la excepción de Microsoft, los otros intérpretes de Javascript han hecho un trabajo impresionante para obedecer las especificaciones y jugar limpio.
David
@David gracias por la buena explicación. Tiende a estar de acuerdo contigo.
Murali VP
24

Los objetos Javascript funcionan como ciudadanos de primera clase , devoluciones de llamada , para no olvidarse de los eventos y luego JQuery .

Sarfraz
fuente
20
Ah jQuery, el marco JS sobrevalorado!
Murali VP
24

¡Ese Javascript no es algo que se pueda aprender en una hora!

Ashwin Prabhu
fuente
44
pero esta parece ser la creencia popular
Livingston Samuel
23

¡Las variables son globales a menos que se declaren locales!

Malo (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();
ellos conmemoran
fuente
2
Nunca había considerado esto. Muy buen punto.
oliva
66
Trato de acostumbrarme for (var i=0;a todos mis bucles
ghoppe
2
Crockford prefiere poner el varen la parte superior de la función, porque no te engaña sobre el tamaño del alcance de la variable. js2-modese quejará si está var ien dos forbucles separados en la misma función, ya que sugiere que cree que tiene dos variables separadas, y no las tiene. Sin embargo, trato de nunca varseparar las cosas de donde las inicializo.
Kragen Javier Sitaker
No me importa si no tiene alcance. No soporto tener una variable declarada 20 líneas antes de que se use
Juan Mendes
8

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

Ah, y por poseer cualquier versión de 'Javascript: la guía definitiva' de David Flanagan (esta información se encuentra en la página 2).

... y por apreciar a aquellos que se han ido antes al tratar de ofuscar el documento de Internet Explorer 4.todos [] y los documentos.capas [Netscape Navigator 4] antes de que Jquery le quitara el dolor.

EDITAR:

Como @Kinopiko señala que JavaScript se llamaba proyecto Mocha originalmente ( algunas fuentes también consideran que se llamaba proyecto LiveWire), pero en general se acepta que el lenguaje (escrito por Brendan Eich) se lanzaría como LiveScript antes de que se adoptara el prefijo Java lanzamiento a principios de 1996.

amelvin
fuente
¡+1 por elegir pedacitos de teta de Douglas Crockford!
gath
1
¿Pensé que JavaScript se llamaba originalmente Mocha?
1
@Kinopiko Según mi libro 'Javascript: The Definitive Guide' 3ed (junio de 1998) de David Flanaghan, se llamaba LiveScript.
amelvin
@gath ¡Un día cuando aprendes algo es un buen día!
amelvin
1
@amelvin Todos los días son días escolares.
Coronel Sponsz el
8

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

  1. JavaScript es bueno pero DOM es un punto débil
  2. Los problemas cruzados del navegador pueden volverte loco
  3. A menos que el código se pruebe en al menos 4 navegadores buenos diferentes, no se puede decir que esté libre de errores
  4. Cierre .............. Debe saber
  5. Su prototipo basado ............ Agradable es divertido aprender esto
  6. palabra clave del depurador ..... Ayuda en crisis
Anil Namde
fuente
Buena lista, muy delgada. Me reí de los "4" buenos navegadores. :) Creo que el número 7 debería ser un odio saludable para los navegadores IE en la versión 8.
Shyam
@Shyam, ¿qué te hace pensar que no deberíamos tener un odio saludable hacia IE8? Todavía tengo problemas en IE8 ... problemas que solo están en IE8.
Rastreador1
@ Tracker1: siempre habrá problemas. Y atacar un navegador que no he tocado, bueno, eso sería un poco injusto. Es por eso que me reí de 4 buenos navegadores: 'Firefox, Chrome, Safari y Opera' son los únicos para los que desarrollo. Dejé de hackear para IE, solo hice que ejecutara el código de Fisher Price, como si JavaScript estuviera deshabilitado.
Shyam
7

¿Qué debe saber todo codificador de JavaScript?

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

Khainestar
fuente
También podría desinstalar su navegador web. Hay muy pocas personas que deshabilitan JavaScript en estos días. Los que probablemente no necesitan navegar por la web. La única excepción a esto es que los rastreadores web necesitan acceder a su contenido público y no pueden confiar en JS para hacerlo.
Jean Vincent
Estoy más interesado en proporcionar formas que no sean de JS para acceder a las cosas. Sé de personas que navegan con JS deshabilitado, o usan lectores de pantalla. No siempre juegan bien con JS. He visto sitios en los que se envía una página de inicio de sesión simple a través de ajax sin ningún tipo de respaldo. Sin JS, sin inicio de sesión. El sitio ni siquiera utiliza mucho JS, solo para enviar formularios.
Khainestar
Creo que los usuarios que deshabilitan intencionalmente JS como usted implica, son muy poco comunes hoy, ciertamente hace menos de 10 años. Es por eso que no entiendo por qué deberíamos diseñar un sitio dos veces para las personas que realmente no quieren visitar su sitio de todos modos. Entonces, en su ejemplo, no pueden iniciar sesión, ¿y qué? La otra cosa es que no hay absolutamente ninguna manera de diseñar un sitio moderno sin JS.
Jean Vincent
6

Sabes javascript si puedes usar Array, Number, String, Date y Object de manera efectiva. Más puntos para Matemáticas y RegExp. Debería poder escribir funciones y utilizar variables (en el ámbito correcto, es decir, como 'métodos' de un objeto).

Veo algunos comentarios acerca de conocer cierres, sintaxis de funciones extravagantes, blabla. Todo eso es bastante irrelevante para esta pregunta. Es como decir que eres un corredor si puedes correr la carrera de 100 metros en menos de 11 segundos.

Digo que puede tomar un par de semanas dominar JavaScript. Después de eso, lleva años y docenas de libros y miles de líneas de programación convertirse en un experto, un ninja, etc.

Pero esa no era la pregunta.

Ah, 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.

Michiel van der Blonk
fuente
1
El cierre está ahí, ya sea que lo cuides o no. Es poderoso pero puede ser mal utilizado fácilmente. No sabes el idioma si no sabes cómo funciona.
gblazex
Además del daño que pueden causar los cierres, como pérdidas de memoria, especialmente en nuestro verdadero amigo Internet Explorer 6.
Marcel Korpel
4

Después de leer todo lo anterior, también está perfectamente bien aprender Javascript usando un marco como jQuery. La verdad es que es la primera forma en que mucha gente recogió a JS en primer lugar. No hay vergüenza en eso.

Sopa
fuente
4

matriz . lengthEl método no es un recuento de los elementos de la matriz, sino el índice más alto. incluso cuando el elemento se configuró enundefined

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 del lenguaje.

revs mykhal
fuente
3

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

duffymo
fuente
2
+1 Jquery ha revolucionado mi uso de javascript.
amelvin
1
Buen argumento resumen. Expandirlo sería una gran respuesta.
Donal Fellows
jQuery te obliga a un modo de procedimiento. Prefiero escribir OO JS
Juan Mendes
No hay nada mágico en la orientación a objetos. Prefiero usar un marco diseñado por John Resig y usado por miles de otros desarrolladores que cualquier cosa que usted o yo escribamos, independientemente del modo.
duffymo
3

Ese javascript es el lenguaje más implementado en el mundo. (Probablemente)

zaf
fuente
8
El lenguaje natural nativo más utilizado es el mandarín. ¿Saber eso te hace un hablante de mandarín? ¿Conocer ese hecho incluso tiene algo que ver con tu comprensión del idioma?
Zano
11
El lenguaje más utilizado en el mundo es el código genético del ADN que controla la síntesis de proteínas dentro de las células.
Ernelli,
Antes del mandarín y el ADN, primero debe desplegarse el lenguaje del amor: por lo tanto, gana. BAM!
Christopher
3

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

Conocer el lenguaje (JavaScript) significa que puede elegir cualquier marco y usarlo a voluntad. Inevitablemente necesitará sumergirse en el código fuente, y si todo lo que sabe es la sintaxis un marco o 2 o 3, entonces no irá lejos. Al decir eso, entrar en el código fuente de algunos marcos diferentes es probablemente una de las mejores formas de ver cómo se puede usar JavaScript. Jugueteando paso a paso por el código en Firebug o Web Inspector, luego revisando la documentación de JavaScript, especialmente los documentos de Mozilla y Webkit, para obtener una mejor comprensión de lo que está viendo.

Comprender la diferencia entre la Programación Orientada a Objetos y la Funcional, que JavaScript es una combinación atractiva de los dos y cuándo y cómo usar ambos para crear una base de código asesina y aplicaciones increíbles lo convertirá en un mejor Programador de JavaScript.

Simplemente leer algunos libros, especialmente las "partes buenas" de Crockford, que simplemente presentan sus opiniones sobre lo que es bueno en JavaScript, mientras que omitir la mayoría de las partes IMPRESIONANTES de JavaScript te va a poner en el camino equivocado.

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

Intentar memorizar algunas trampas o WTF tampoco va a ayudar mucho, lo aprenderá si comienza a codificar y recorrer el código de una biblioteca / marcos, especialmente uno útilmente comentado, para ver por qué han utilizado ciertos propiedades / valores y no otros por qué y cuándo es bueno usar operandos y operadores específicos, todo esto está en el código del uso del marco de trabajo de las personas. ¿Qué mejor que aprender con el ejemplo? : ^)

Christos Constandinou
fuente
+1 por no adorar a Crockford. Trato sus puntos de vista como si fuera un predicador en la iglesia. Respeto lo que dicen pero lo tomo todo con un grano de sal.
Juan Mendes
2

En Javascript, el rendimiento importa.

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

caltuntas
fuente
1
De hecho, los compiladores del navegador son muy buenos para optimizar su código.
Eduardo
1
Chrome es muy inteligente para optimizar su código, esta respuesta simplemente no es cierta con todos los nuevos motores JS
Juan Mendes
¿Qué pasa con IE, navegadores móviles?
caltuntas
1

literales de objeto porque son muy agradables de escribir.

caca
fuente
0
  1. Sabiendo que hay una vida con y sin with()y dónde trazar la línea.
  2. Puede crear errores personalizados con la throwinstrucción para detener deliberadamente el tiempo de ejecución de JavaScript.
revs FK82
fuente
-1

JavaScript no es compatible con la separación de la palabra clave de retorno y la declaración de retorno con un carácter de nueva línea como el siguiente código (o pruébelo en mi página jsFiddle )

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

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

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

PD. He escrito JavaScript casi 6 años. Pero acabo de encontrar este error conmigo mismo cuando intento ejecutar la siguiente función. Siempre vuelve indefinido. Cuando uso depurador y entro en 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') : '');
}
Soul_Master
fuente
3
En JavaScript, los caracteres de nueva línea generalmente actúan como separadores de declaraciones; solo cuando es imposible que haya finalizado una declaración (por ejemplo, var foo = "bar" +) el analizador sigue leyendo.
Marcel Korpel el
Otro jsFiddle. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master
2
@ Marcel: eso no es precisamente cierto; por ejemplo, las dos líneas var foo = 5y -1;darán como resultado que foo se establezca en 4, aunque cada una de ellas sea una declaración válida por sí misma.
Ben Blank
44
Esto se debe a que el lenguaje inyecta punto y coma automáticamente para separar las declaraciones. Este es un problema con el idioma. Su declaración de devolución se convierte a esto: return; {key: value,} Para evitar este problema, debe adoptar la práctica de poner punto y coma en la misma línea, de esta manera: return {key: value}; Además, hágase un favor y obtenga una copia de Douglas Crockford: The Good Parts. Esto se menciona claramente en el libro.
Rajat
@Ben - Caso interesante, gracias por señalar eso. Dicho esto, recomendaría no confiar en estos casos extremos y simplemente poner todo en una línea que termine con un punto y coma y solo poner su código en varias líneas cuando una línea termina con algo que una declaración o expresión simplemente no puede terminar con .
Marcel Korpel el
-3

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

usuario187291
fuente
1
¿Qué hay de malo en poder escribir Y-combinator's? Y sí, JavaScript es un lenguaje funcional. Si quiere decir que "sabe javascript" es necesario comprender bien la programación funcional.
Raynos
C también se puede usar como lenguaje funcional.
kzh
He leído sobre el combinador Y recientemente, entiendo cómo funciona y en qué casos podría usarse ... pero nunca encontré una instancia en la que no pudiera reescribir un problema para no necesitar el combinador Y.
Evert
-5

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

Viktor Sehr
fuente
2
GWT no es realmente JavaScript, es la forma Java de escribir JavaScript.
Livingston Samuel
... y todo programador de Javascipt debería saberlo.
Viktor Sehr
que su proyecto javascript probablemente podría desarrollarse de una manera mucho más conveniente.
Viktor Sehr
66
Creo que Javascript es más fácil de tratar que Java, personalmente.
timw4mail