O que todo programador JavaScript deve saber? [fechadas]

368

Existe um conjunto de coisas que todo programador de JavaScript deve saber para poder dizer "eu sei JavaScript"?

Gate
fonte

Respostas:

590

Não é jQuery. Não YUI. Não (etc. etc.)

As estruturas podem ser úteis, mas geralmente ocultam os detalhes às vezes feios de como o JavaScript e o DOM realmente funcionam com você. Se o seu objetivo é poder dizer "eu sei JavaScript", investir muito tempo em uma estrutura se opõe a isso.

Aqui estão alguns recursos da linguagem JavaScript que você deve saber para entender o que está fazendo e não ser pego de surpresa, mas que não são imediatamente óbvios para muitas pessoas:

  • Isso object.prope object['prop']é a mesma coisa (então você pode parar de usar eval, obrigado); que as propriedades do objeto são sempre strings (mesmo para matrizes); o que for... inserve (e o que não é ).

  • Detecção de propriedades; o que undefinedé (e por que cheira ); por que o inoperador aparentemente pouco conhecido é benéfico e diferente de typeof/ undefinedchecks; hasOwnProperty; o objetivo de delete.

  • Que o Numbertipo de dados é realmente um float; as dificuldades independentes do idioma de usar carros alegóricos; evitando a parseIntarmadilha octal.

  • Escopo de função aninhada; a necessidade de usar varno escopo que você deseja evitar globais acidentais; como os escopos podem ser usados ​​para fechamento; o problema do loop de fechamento .

  • Como variáveis ​​e windowpropriedades globais colidem; como variáveis ​​globais e elementos do documento não devem colidir, mas sim no IE; a necessidade de usar varno escopo global também para evitar isso.

  • Como a functiondeclaração age para ' içar ' uma definição antes do código que a precede; a diferença entre instruções de função e expressões de função; por que expressões de função nomeadas não devem ser usadas .

  • Como o construtor funciona, a prototypepropriedade e o newoperador realmente funcionam; métodos de explorar isso para criar o sistema normal de classe / subclasse / instância que você realmente queria; quando você desejar usar objetos baseados em fechamento em vez de prototipar. (A maioria dos materiais tutoriais de JS é absolutamente péssima nisso; levei anos para esclarecer minha mente.)

  • Como thisé determinado no momento da chamada, não vinculado; como conseqüentemente a passagem de métodos não funciona como você espera de outros idiomas; como fechamentos ou Function#bindpodem ser usados ​​para contornar isso.

  • Outros recursos do ECMAScript Fifth Edition, como indexOf, forEache os métodos deArray programação funcional ativados ; como consertar navegadores mais antigos para garantir que você possa usá-los; usá-los com expressões de função anônimas em linha para obter um código compacto e legível.

  • O fluxo de controle entre o navegador e o código do usuário; execução síncrona e assíncrona; eventos que disparam dentro do fluxo de controle (por exemplo, foco) vs. eventos e tempos limite que ocorrem quando o controle retorna; como chamar um built-in supostamente síncrono alertpode acabar causando uma reentrada potencialmente desastrosa.

  • Como o script entre janelas afeta instanceof; como o script entre janelas afeta o fluxo de controle em diferentes documentos; como postMessageesperamos resolver isso.

Veja esta resposta sobre os dois últimos itens.

Acima de tudo, você deve visualizar o JavaScript criticamente, reconhecendo que é, por razões históricas, uma linguagem imperfeita (ainda mais que a maioria das línguas) e evitando seus piores problemas. Vale a pena ler o trabalho de Crockford nessa frente (embora eu não concorde 100% com ele sobre o que são as "partes boas").

bobince
fonte
80
Ahhhh, finalmente, uma resposta cuidadosa e completa. Se eu pudesse +10, eu faria. Conhecer uma estrutura não significa que você pode programar o JavaScript efetivamente.
Tim Baixo
6
Muito obrigado por essa resposta bem pensada. Gostaria de acrescentar que o uso de uma estrutura pode ser realmente benéfico se você souber como está sendo feito. Você deve aprender a fazer essas coisas sozinho antes de recorrer a uma estrutura.
Javier Parra
4
@ Daniel: na verdade não é assim, thisé vinculado da maneira que você acessá-lo. Experimente:, var o= {b: function(){alert(this===o);}};então o['b']();-> true. E se você quiser realmente esquisito, (o['b'])()-> true, mas (c= o['b'])()-> false, e apenas no Mozilla, (true? o['b'] : null)()-> true. W, T, e de fato F.
bobince
7
Que merda! Não é como se conhecer todas as peculiaridades do navegador o tornasse um codificador JS melhor. Talvez haja mais credibilidade de rua entre seus colegas ... Abstrações tornam a vida mais fácil e são uma parte essencial do JS, então eu diria que conhecer uma estrutura faz de você um codificador JS melhor do que aquele que não faz e quer fazer as coisas do longo caminho.
Vince Panuccio
19
Sir Psycho: observe que nada dessa resposta menciona o DOM, que é o que as grandes bibliotecas existem para ajudá-lo. Uma estrutura não pode protegê-lo de nenhuma das coisas mencionadas aqui . Esse material é importante para qualquer pessoa que esteja executando scripts do navegador, usando ou não uma estrutura.
Tim Baixo
248

Que pode ser desativado.

graphicdivine
fonte
12
+1, estou tão cansado de páginas que nem sequer se preocupam com o básico da degradação graciosa porque "é tão difícil e todo mundo tem o javascript ativado de qualquer maneira".
wasatz
27
+1. Uma página que não funciona sem JavaScript é uma página que será frágil mesmo com o JS ativado.
quer
9
@iconiK Vou dizer a todas as minhas clientes do governo que têm o JavaScript desativado globalmente por razões de segurança que são todos idiotas, devo?
GraphicDivine
16
-1 Este tópico está fora de tópico e não tem nada a ver com o conhecimento sobre javascript como idioma. É bom considerar ao projetar um aplicativo Web, mas ainda não é uma resposta que pertence a esse segmento.
TM.
24
@TM, não, é realmente uma consideração importante. Isso deve estar na vanguarda de sua mente enquanto você testa valores antes de inseri-los no banco de dados ou tem a única maneira de acessar o seu site por meio de uma caixa pop-up javascript sofisticada. Falando nisso ... acho que preciso ir checar alguma coisa.
precisa
75

Compreender o que está escrito no Javascript de Crockford : The Good Parts é uma suposição muito boa de que uma pessoa é um programador de JS decente.

É possível saber como usar uma boa biblioteca como o JQuery e ainda não conhecer as partes ocultas do Javascript.

Outra observação são as ferramentas de depuração em vários navegadores. Um programador de JS deve saber como depurar seu código em diferentes navegadores.

Oh! E conhecer o JSLint vai machucar totalmente seus sentimentos !!

bron
fonte
+1 Continue esquecendo esse livro, excelente recomendação.
David
8
Há também um monte de vídeos instrutivos e perspicaz Crockford no developer.yahoo.com/yui/theater - e eu acho que não precisa mencionar crockfordfacts.com :-)
ndim
+1 - JSLint é uma coisa maravilhosa quando você tenta desenvolver JS para uma estrutura que não oferece suporte a depuração incorporada ( tosse Siebel, tosse PDFs).
J. Polfer
49

Se você quer ser um verdadeiro ninja do JavaScript, deve saber as respostas para todas as perguntas do Perfection matando o Quiz do JavaScript .

Um exemplo para aguçar o apetite:

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

O que essa expressão retorna?

  • "número"
  • "Indefinido"
  • "função"
  • Erro
Skilldrick
fonte
10
Dê uma olhada nas minhas respostas: codingspot.com/2010/02/…
CMS
@CMS Muito bom! Você realmente acertou na primeira vez ou isso inclui alguma pesquisa?
Skilldrick
7
Skilldrick: Eu acho que eu tenho todos eles no primeiro tempo, eu sou um leitor assíduo do ECMA-262 Padrão (eu sei, eu sou uma aberração :-)
CMS
46

Você não conhece JavaScript se não souber:

  1. Encerramentos
  2. Herança baseada em protótipo
  3. O padrão do módulo
  4. O W3C-DOM
  5. Como os eventos funcionam
Edwin
fonte
Eu realmente gosto desta resposta. Ajuda a detectar áreas escuras em seu conhecimento. Eventos são a única coisa ainda um pouco obscura para mim nesta lista de verificação (se o padrão do módulo significa "não prejudicar o espaço de nomes global" e incluir escopos e o operador var).
silviot
11
Eu argumentaria isso You don't know JavaScript if you don't know The W3C-DOM. As duas coisas são diferentes.
Gblazex #
37

..que javascript não é java :)

Muitas pessoas começaram no desenvolvimento de sites e me disseram que o javascript é apenas java!

Sripathi Krishnan
fonte
+1 Este ponto é bastante fundamental!
Amelvin 13/04
71
"O JavaScript é para Java, assim como o tapete é para o carro".
21710 Josh Lee #
11
Javascript é tão parecido com Java quanto C # é parecido com C. Certamente, a sintaxe é parecida, mas muito diferente.
Earlz
4
a menos que eles usem o Google Web Toolkit
Afriza N. Arief
Curiosamente, a Microsoft baseou as funções de data compatíveis com Y2k no JScript for IE3 em java.util.Date.
Bayard Randel
27
  1. Familiarize-se com pelo menos uma biblioteca Javascript (Jquery, Prototype, etc).

  2. Aprenda a usar as ferramentas de depuração dos principais navegadores (MSIE 7-8, Firefox, Chrome, Safari)

  3. Leia sobre o setor: o site de Douglas Crockford é um tesouro, enquanto o Ajaxian.com é um bom blog para acompanhar idéias novas, interessantes ou estranhas para o Javascript. Existem vários outros recursos, mas esses são os que mais me ajudaram.

David
fonte
Sério, por que o voto negativo?
David
+1 Muita votação tática, seriamente as pessoas deveriam apenas votar nas boas respostas, não apenas tentar colocar sua resposta no topo.
Amelvin 13/04
11
O @Murali VP assumi o Javascript "conhecido" no contexto dos navegadores. Logo após algum equivalente ao hello world, você precisará descobrir seus erros lógicos e de tempo de execução, que podem ser diferentes por intérprete. Eu não afirmaria conhecer nenhum idioma se não soubesse depurá-lo. Quanto a um requisito de estrutura, o Javascript é como o C inicial, onde diferenças sutis de implementação sabotarão os incautos; jQuery e prototypejs encobrem essas diferenças e tornam o Javascript uma ferramenta confiável, adicionando chamadas de API adicionais para aumentar a produtividade. (cont)
David
@Murali VP Para ser justo, o Javascript percorreu um longo caminho desde que eu comecei a usá-lo nos anos 90 e, com exceção da Microsoft, os outros intérpretes de Javascript fizeram um trabalho impressionante para obedecer às especificações e jogar de forma justa.
David
@ David obrigado pela boa explicação. Tende a concordar com você.
Murali VP
24

Os objetos Javascript e funcionam como cidadãos de primeira classe , retornos de chamada , para não esquecer os eventos e, em seguida, o JQuery .

Sarfraz
fonte
20
Ah jQuery, o framework JS exagerado!
Murali VP
24

Esse Javascript não é algo que pode ser aprendido em uma hora!

Ashwin Prabhu
fonte
4
mas esta parece ser a crença popular
Livingston Samuel
23

As variáveis ​​são globais, a menos que declaradas locais !!

Ruim (DoSomething () é chamado apenas 10 vezes):

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

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

CountToFive();

Bom (DoSomething () é chamado 50 vezes como pretendido):

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

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

CountToFive();
theycallmemorty
fonte
2
Eu nunca tinha considerado isso. Muito bom ponto.
olive
6
I tentar obter o hábito de for (var i=0;em todas as minhas voltas
ghoppe
2
Crockford prefere colocar o varno topo da função, porque não o engana sobre o tamanho do escopo da variável. js2-modereclamará se você fizer var idois forloops separados na mesma função, pois sugere que você acha que tem duas variáveis ​​separadas e não. No entanto, tento nunca varseparar as coisas de onde as inicializo.
Kragen Javier Sitaker
Eu não me importo se não tiver escopo. Eu não posso estar tendo uma variável declarada 20 linhas antes de ser usado
Juan Mendes
8

Por saber que o Javascript era originalmente chamado LiveScript e o prefixo 'Java' foi anexado para fins de marketing, não porque Java e Javascript estejam relacionados (o que não são).

Ah, e por possuir qualquer versão do 'Javascript: O Guia Definitivo' de David Flanagan (esta informação está na página 2).

... e por apreciar aqueles que foram antes ao tentar ofuscar o document.layers do Internet Explorer 4 e todos os document.layers do Netscape Navigator 4 antes de pessoas como Jquery aliviarem a dor.

EDITAR:

Como o @Kinopiko aponta, o JavaScript foi chamado originalmente de projeto Mocha ( algumas fontes também consideram o projeto LiveWire), mas geralmente é aceito que a linguagem (escrita por Brendan Eich) esteja programada para ser lançada como LiveScript antes que o prefixo Java fosse adotado em lançado no início de 1996.

amelvin
fonte
+1 para escolher brocas de Douglas Crockford!
Gate
11
Eu pensei que o JavaScript era originalmente chamado Mocha?
11
@ Kinopiko De acordo com o meu livro 'Javascript: The Definitive Guide' 3ed (junho de 1998) de David Flanaghan, ele se chamava LiveScript.
Amelvin 13/04
@ath Um dia em que você aprende algo é um bom dia!
Amelvin 13/04
11
@amelvin Todo dia é dia de escola.
Coronel Sponsz 13/04/10
8

Deve-se estar ciente do seguinte para dizer "Eu sei JavaScript":

  1. JavaScript é bom, mas DOM é um ponto problemático
  2. Problemas entre navegadores podem deixá-lo louco
  3. A menos que o código seja testado em pelo menos 4 navegadores bons diferentes, você não pode dizer que é livre de bugs
  4. Encerramento .............. Precisa saber
  5. Seu protótipo baseado ........... Agradável, é divertido aprender isso
  6. palavra-chave do depurador ..... Ajuda na crise
Anil Namde
fonte
Boa lista, muito magro. Eu ri de "4" bons navegadores. :) Eu acho que o número 7 deve ser um ódio saudável para navegadores IE sob a versão 8.
Shyam
@ Shayam, o que faz você pensar que não devemos ter um ódio saudável ao IE8? Ainda tenho problemas no IE8 ... problemas que estão apenas no IE8.
precisa saber é o seguinte
@ Tracker1: sempre haverá problemas. E bater em um navegador que não toquei, bem, isso seria um pouco injusto. É por isso que eu ri de 4 bons navegadores: 'Firefox, Chrome, Safari e Opera' são os únicos para os quais desenvolvo. Parei de invadir o IE, apenas o rodou com o código Fisher Price, como se o JavaScript estivesse desativado.
Shyam
7

Esse JavaScript é muito mais diferente do que você imagina. Assista a este excelente Google Tech Talk para obter uma impressão: http://www.youtube.com/watch?v=hQVTIJBZook

ericteubert
fonte
11
+1 Esta é uma ótima explicação de como parar a sucção do JavaScript. Vale a pena assistir depois: yuiblog.com/crockford
Coronel Sponsz
Outra boa apresentação Crockfod ( "O JavaScript Linguagem de programação" 4 partes) video.yahoo.com/watch/111593/1710507
Alex K.
7

O que todo codificador javascript deve saber?

Que tal, posso desativar seus esforços com 2 cliques. Portanto, forneça um substituto, se possível.

Khainestar
fonte
Você também pode desinstalar o seu navegador. Atualmente, existem muito poucas pessoas que desabilitam o javascript. Aqueles que provavelmente não precisam navegar na web. A única exceção é que os rastreadores da web precisam acessar seu conteúdo público e não podem confiar no JS para fazer isso.
Jean Vincent
Estou mais interessado em fornecer maneiras não JS de acessar coisas. Conheço pessoas que navegam com o JS desativado ou usam leitores de tela. Eles nem sempre jogam bem com JS. Já vi sites em que uma página de login simples é enviada via ajax sem fallback. Sem JS, sem login. O site nem usa muito JS, apenas para enviar formulários.
Khainestar
Acredito que os usuários que desabilitam intencionalmente o JS, como você sugeriu, são muito incomuns hoje, certamente há menos de 10 anos. É por isso que não entendo por que devemos criar um site duas vezes para pessoas que simplesmente não querem visitá-lo de qualquer maneira. Então, no seu exemplo, eles não podem entrar, e daí? A outra coisa é que não há absolutamente nenhuma maneira de criar um site moderno sem o JS.
10287 Jean Vincent
6

Você conhece javascript se pode usar Matriz, Número, Cadeia de caracteres, Data e Objeto efetivamente. Pontos positivos para Math e RegExp. Você deve poder escrever funções e usar variáveis ​​(no escopo correto, isto é, como 'métodos' de um objeto).

Vejo alguns comentários sobre fechamento de conhecimento, sintaxe de função extravagante, blabla. Tudo isso é irrelevante para esta questão. É como dizer que você é um corredor, se você pode executar o traço de 100m em 11 segundos.

Eu digo que talvez demore algumas semanas para se tornar proficiente em javascript. Depois disso, são necessários anos e dezenas de livros e milhares de linhas de programação para se tornar um especialista, um ninja, etc.

Mas essa não era a questão.

Ah, e o DOM não faz parte do javascript, nem o jQuery. Então, acho que ambos são igualmente irrelevantes para a questão.

Michiel van der Blonk
fonte
11
O fechamento existe, quer você goste ou não. É poderoso, mas pode ser facilmente mal utilizado. Você não conhece o idioma se não sabe como ele funciona.
gblazex
Além dos fechamentos de danos pode causar, como vazamentos de memória, especialmente em nosso verdadeiro amigo Internet Explorer 6.
Marcel Korpel
4

Depois de ler todas as opções acima, também é perfeitamente bom aprender Javascript usando uma estrutura como o jQuery. A verdade é que é a primeira vez que muitas pessoas escolhem JS em primeiro lugar. Não há vergonha nisso.

Sopa
fonte
4

array . lengthO método não é uma contagem de itens da matriz, mas o índice mais alto. mesmo quando o item foi definido comoundefined

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

esse comportamento dificilmente se distingue de um bug de design de linguagem.

mykhal
fonte
3

jQuery seria minha melhor recomendação. Não apenas pelo código em si, é o idioma, o estilo, o pensamento por trás dele que é mais digno de emulação.

duffymo
fonte
2
+1 O Jquery revolucionou meu uso de javascript.
Amelvin 13/04
11
Esboço de bom argumento. Expandir seria uma ótima resposta.
Donal Fellows
O jQuery força você a entrar no modo processual. Eu prefiro escrever OO JS
Juan Mendes
Não há nada mágico na orientação a objetos. Prefiro usar uma estrutura projetada por John Resig e usada por milhares de outros desenvolvedores do que qualquer coisa que você ou eu escrevêssemos, independentemente do modo.
duffymo
3

Esse javascript é a linguagem mais amplamente implementada no mundo. (Provavelmente)

zaf
fonte
8
A linguagem natural nativa mais amplamente implantada é o mandarim. Saber disso faria de você um falante de mandarim? Saber esse fato teria alguma coisa a ver com a compreensão do idioma?
Zano
11
A linguagem mais amplamente utilizada no mundo é o código genético do DNA que controla a síntese de proteínas nas células.
Ernelli
Antes do mandarim e do DNA, a linguagem do amor deve primeiro ser empregada: assim, ela vence. BAM!
22711 Christopher
3

Aprender um idioma muito bem e entender suas várias peculiaridades vem de (anos de) experiência. Se você quer ser um programador melhor, eu diria, entendendo os padrões de design, como e quando usá-los e / ou mesmo quando você os estiver usando sem perceber; arquitetura técnica e experiência do usuário.

Conhecer a linguagem (JavaScript) significa que você pode escolher qualquer estrutura e usá-la à vontade. Você inevitavelmente precisará mergulhar no código-fonte e, se tudo o que você sabe é a sintaxe de um framework ou 2 ou 3, não irá muito longe. Ao dizer isso, entrar no código-fonte de algumas estruturas diferentes é provavelmente uma das melhores maneiras de ver como o JavaScript pode ser usado. Para fazer uma bagunça, percorra o código no Firebug ou no Web Inspector e verifique a documentação do JavaScript, especialmente os documentos Mozilla e Webkit, para entender melhor o que você está vendo.

Compreender a diferença entre Programação Orientada a Objeto e Programação Funcional, que JavaScript é uma mistura sexy dos dois e quando e como usar os dois para criar uma base de código matadora e aplicativos impressionantes, fará de você um Programador JavaScript melhor.

Simplesmente ler alguns livros, especialmente as "partes boas" de Crockford, que apenas apresentam suas opiniões sobre o que é bom em JavaScript, enquanto pular a maior parte das partes INCRÍVEIS do JavaScript vai levá-lo ao pé errado.

Verificar o código escrito por alguém como Thomas Fuchs, por outro lado, fornecerá muito mais informações sobre o poder de escrever JavaScript incrível e eficiente.

Tentar memorizar algumas dicas ou WTFs também não ajudará muito, você entenderá isso se começar a codificar e percorrer um código de biblioteca / frameworks, especialmente um comentário útil, para ver por que eles usaram certos propriedades / valores e não outros por que e quando é bom usar operandos e operadores específicos, tudo isso existe no código de uso das pessoas da estrutura. Quão melhor do que aprender pelo exemplo? : ^)

christos constandinou
fonte
+1 por não adorar Crockford. Trato seus pontos de vista como pregador da igreja. Eu respeito o que eles dizem, mas tomo tudo com um grão de sal.
Juan Mendes
2

Em Javascript, o desempenho é importante.

Não há um compilador inteligente para otimizar seu código, portanto, você deve ter mais cuidado ao escrever código javascript do que linguagens como C #, Java ...

caltuntas
fonte
11
De fato, os compiladores de navegador são muito bons em otimizar seu código.
9103 Eduardo
11
Chrome é muito inteligente em otimizar seu código, esta resposta não é apenas verdadeiro com todos os novos motores JS
Juan Mendes
E o IE, navegadores móveis?
caltuntas
1

literais de objetos porque são muito legais de escrever.

cocô
fonte
0
  1. Sabendo que existe uma vida com e sem with()e onde traçar a linha.
  2. Você pode criar erros personalizados com a throwinstrução para parar propositadamente o tempo de execução do javascript.
FK82
fonte
-1

O JavaScript não oferece suporte à separação da palavra-chave return e da declaração return com caracteres de nova linha, como o código a seguir (ou tente na minha página jsFiddle )

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

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

Não entendo por que o JavaScript não suporta esse estilo, porque é muito mais fácil ler código-fonte JavaScript muito complexo quando comparado ao estilo padrão do JavaScript.

PS. Eu escrevi JavaScript quase 6 anos. Mas acabei de encontrar esse bug quando tento executar a seguinte função. Sempre retorna indefinido. Quando eu uso o depurador e passo para esta função, tudo está funcionando bem. Eu acho que deve ser o pior bug de programação da minha 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
fonte
3
Em JavaScript, os caracteres de nova linha geralmente atuam como separadores de instruções; somente quando é impossível uma declaração terminar (por exemplo, var foo = "bar" +) o analisador lê.
Marcel Korpel
Outro jsFiddle. jsfiddle.net/Soul_Master/BxrDJ
Soul_Master
2
@Marcel - Isso não é exatamente verdade; por exemplo, as duas linhas var foo = 5e -1;resultarão em foo sendo definido como 4, mesmo que cada uma seja uma declaração válida por si própria.
Ben Blank
4
Isso ocorre porque o idioma injeta ponto e vírgula automaticamente para separar instruções. Este é um problema com o idioma. Sua declaração de retorno é convertida para isso: return; {key: value,} Para evitar esse problema, você deve adotar a prática de colocar ponto e vírgula na mesma linha, assim: return {key: value}; Além disso, faça um favor a si mesmo e pegue uma cópia de Douglas Crockford: The Good Parts. Isso é claramente mencionado no livro.
Rajat
@ Ben - Caso interessante, obrigado por apontar para isso. Dito isso, eu recomendo não confiar nesses casos extremos e colocar tudo em uma linha que termina com ponto-e-vírgula e colocar seu código em várias linhas quando uma linha termina com algo que uma declaração ou expressão simplesmente não pode terminar com .
Marcel Korpel
-3

Como o JS é uma linguagem funcional, um programador de JS decente deve ser capaz de escrever o combinador Y e explicar como ele funciona do início ao fim.

user187291
fonte
11
O que há de errado em ser capaz de escrever combinadores Y? E sim, o javascript é uma linguagem funcional. Se você quer dizer que "sabe javascript", é necessário um bom entendimento da programação funcional.
Raynos 8/10/10
C também pode ser usado como uma linguagem funcional.
kzh
Li sobre o combinador Y recentemente, entendo como ele funciona e em quais casos ele poderia ser usado ... mas nunca encontrei uma instância em que não pudesse reescrever um problema para não precisar do combinador Y.
Evert
-5

... sobre o Google Web Toolkit , o que significa que seu projeto javascript provavelmente poderia ser desenvolvido de uma maneira muito mais conveniente.

Viktor Sehr
fonte
2
O GWT não é realmente JavaScript, é a maneira Javaish de escrever JavaScript.
Livingston Samuel
... e todo programador Javascipt deve saber sobre isso.
Viktor Sehr
que seu projeto javascript provavelmente poderia ser desenvolvido de uma maneira muito mais conveniente.
Viktor Sehr
6
Eu acho que Javascript é mais fácil de lidar do que Java, pessoalmente.
timw4mail