Respostas:
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.prop
e 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
... in
serve (e o que não é ).
Detecção de propriedades; o que undefined
é (e por que cheira ); por que o in
operador aparentemente pouco conhecido é benéfico e diferente de typeof
/ undefined
checks; hasOwnProperty
; o objetivo de delete
.
Que o Number
tipo de dados é realmente um float; as dificuldades independentes do idioma de usar carros alegóricos; evitando a parseInt
armadilha octal.
Escopo de função aninhada; a necessidade de usar var
no 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 window
propriedades globais colidem; como variáveis globais e elementos do documento não devem colidir, mas sim no IE; a necessidade de usar var
no escopo global também para evitar isso.
Como a function
declaraçã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 prototype
propriedade e o new
operador 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#bind
podem ser usados para contornar isso.
Outros recursos do ECMAScript Fifth Edition, como indexOf
, forEach
e 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 alert
pode 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 postMessage
esperamos 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").
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.
Que pode ser desativado.
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 !!
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
Você não conhece JavaScript se não souber:
You don't know JavaScript if you don't know The W3C-DOM
. As duas coisas são diferentes.
..que javascript não é java :)
Muitas pessoas começaram no desenvolvimento de sites e me disseram que o javascript é apenas java!
Familiarize-se com pelo menos uma biblioteca Javascript (Jquery, Prototype, etc).
Aprenda a usar as ferramentas de depuração dos principais navegadores (MSIE 7-8, Firefox, Chrome, Safari)
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.
Esse Javascript não é algo que pode ser aprendido em uma hora!
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();
for (var i=0;
em todas as minhas voltas
var
no topo da função, porque não o engana sobre o tamanho do escopo da variável. js2-mode
reclamará se você fizer var i
dois for
loops separados na mesma função, pois sugere que você acha que tem duas variáveis separadas e não. No entanto, tento nunca var
separar as coisas de onde as inicializo.
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.
Deve-se estar ciente do seguinte para dizer "Eu sei JavaScript":
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
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.
Eu recomendo fortemente a leitura de Javascript: The Good Parts
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.
JSLint http://www.JSLint.com/
array . length
O 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.
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.
Esse javascript é a linguagem mais amplamente implementada no mundo. (Provavelmente)
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? : ^)
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 ...
O seguinte também é importante:
1) Elevação variável. 2) Cadeias de escopo e objetos de ativação.
e então coisas como estas: :)
3) wtfjs.com
4) tudo é um objeto http://www.lifeinafolder.com/images/Js.jpg
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') : '');
}
var foo = "bar" +
) o analisador lê.
var foo = 5
e -1;
resultarão em foo sendo definido como 4, mesmo que cada uma seja uma declaração válida por si própria.
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.
... sobre o Google Web Toolkit , o que significa que seu projeto javascript provavelmente poderia ser desenvolvido de uma maneira muito mais conveniente.