Atualizado em 01/09/2015: Meu método original, keys(window)
apresentou resultados inúteis em outros navegadores que não o Chrome. Atualizei esta publicação com um método mais confiável.
Os globais do JavaScript são considerados ruins. E como colaborador do projeto MooTools, ouvi isso diariamente por quase uma década. O MooTools foi criticado por estender os nativos, mas também por colocar objetos no espaço global, como Browser
e $$
. Acho a filosofia “as variáveis globais são terríveis” um pouco engraçada, pois até mesmo os carregadores de jQuery e JavaScript usam uma variável global.
Deixando de lado os globais intencionais, o vazamento de variáveis globais é uma prática ruim e o resultado de uma codificação desleixada. Então, como podemos ver quais propriedades são personalizadas no namespace global? É mais fácil do que o senhor pensa:
// UPDATE: This method is too naive // Returns an array of window property names //keys(window); // Inject an iframe and compare its `contentWindow` properties to the global window properties (function() { var iframe = document.createElement('iframe'); iframe.onload = function() { var iframeKeys = Object.keys(iframe.contentWindow); Object.keys(window).forEach(function(key) { if(!(key in iframeKeys)) { console.log(key); } }); }; iframe.src="https://davidwalsh.name/about:blank"; document.body.appendChild(iframe); })();
O senhor verá algumas variáveis que sabe que não foram definidas, como window
, document
, top
, e location
, mas os outros terão sido globais vazados (ou intencionais) definidos pelo código JavaScript personalizado!
buscar API
Um dos segredos mais mal guardados sobre AJAX na Web é que a API subjacente a ele,
XMLHttpRequest
, não foi realmente criada para o uso que estamos fazendo dela. Fizemos bem em criar APIs elegantes em torno do XHR, mas sabemos que podemos fazer melhor. Nosso esforço para…
Flexbox Equal Height Columns (Colunas de altura igual)
O Flexbox era para ser o pote de ouro no longo, longo arco-íris de técnicas de layout CSS insuficientes. E a única decepção que tive com o flexbox foi o fato de os fornecedores de navegadores terem demorado tanto para implementá-lo. Também não posso afirmar que tenha ultrapassado os limites do flexbox, mas…