Eu me pergunto por que estruturas / bibliotecas têm seus próprios auxiliares, embora já existam nativamente.
Vamos usar jQuery e AngularJS . Eles têm suas próprias each
funções de iterador:
Mas nós temos Array.prototype.forEach
.
Similarmente,
Mas temos a JSON.parse()
função em baunilha JavaScript.
javascript
libraries
web-framework
Cihad Turhan
fonte
fonte
jQuery.each
eArray.prototype.forEach
não são equivalentes.$.each
e não usar o nativo (e mais rápido)Array.prototype.forEach
?Respostas:
Porque quando essas bibliotecas foram gravadas, alguns dos principais navegadores não suportaram esses recursos. Uma vez gravados e usados, esses recursos não podem ser removidos dessas bibliotecas sem interromper muitos aplicativos.
(Nesse caso, "navegador principal" significa um navegador que ainda possui grande participação de mercado, que inclui versões mais antigas de navegadores como o Internet Explorer, onde um grande número de usuários não necessariamente atualiza para a versão mais recente.)
fonte
Array.prototype.forEach
itera apenas sobre matrizes - ambas as funções do iterador da biblioteca podem iterar sobre matrizes ou objetos.Porque navegadores diferentes têm implementações e recursos diferentes integrados em seu mecanismo JavaScript. O mesmo código "vanilla-JS" pode ser executado de maneira diferente em dois navegadores diferentes ou mesmo em duas versões diferentes do mesmo navegador.
A camada de abstração fornecida pelas bibliotecas JS populares é uma maneira de contornar isso. Nos bastidores, ele trabalha com as diferentes capacidades e limitações dos navegadores e oferece uma API unificada e fácil de usar. Isso, por sua vez, permite que operações comuns, como obter um objeto DOM ou buscar dados JSON, sejam consistentes, eficientes e independentes do navegador.
Isso facilita muito a vida dos desenvolvedores que agora podem se concentrar no que o código deve fazer, e não na forma como ele deve ser escrito para funcionar com o navegador X ou Y.
fonte
Array.prototype.forEach
eJSON.parse
, uma rápida pesquisa no Google mostra que você está errado.JSON
O objeto não era suportado no IE7 eforEach
não estava definido em algumas versões do Opera. Bibliotecas como o jQuery, porém, conheciam essas limitações e as contornavam nos bastidores. Então, acho que minha resposta permanece.1. Compatibilidade com versões anteriores
JavaScript é uma implementação do ECMAScript . A maioria dessas funções foi introduzida no ECMAScript 5 (ES5); no entanto, muitos navegadores mais antigos que ainda possuem uma participação significativa no mercado não suportam essas funções (consulte a tabela de compatibilidade do ECMAScript 5 ), sendo o IE8 o mais notável.
Geralmente as bibliotecas reverterão para a implementação nativa, se existir, caso contrário, use seu próprio polyfill; por exemplo, vejamos a implementação do AngularJS ( angular.js L203-257 ):
As linhas a seguir verificam se o
forEach
método existe no objeto e se é a versão do AngularJS ou não. Caso contrário, ele usa a função já especificada (a versão nativa):2. Conveniência
No JavaScript nativo,
Array.prototype.forEach
é um método exclusivo para uma instância deArray
, no entanto, quase todos tambémObject
são iteráveis.Por esse motivo, muitos criadores de bibliotecas tornam suas funções polimórficas (capazes de aceitar vários tipos como entrada). Vamos pegar o código AngularJS acima e ver quais entradas ele aceita:
Funções :
Matrizes (com suporte nativo para cada um):
Objetos semelhantes a matrizes, incluindo Matriz (sem suporte nativo para Cada), String, HTMLElement, Objeto com uma propriedade de comprimento válida:
Objetos:
Conclusão
Como você pode ver, o AngularJS itera sobre a maioria dos objetos JavaScript, embora funcione da mesma maneira que a função nativa, aceita tipos de entrada muito mais diferentes e, portanto, é uma adição válida à biblioteca e também uma maneira de trazer funções ES5 para navegadores herdados.
fonte
master
alterações sejam alteradas.