Sé que ambos idiomas son del mismo estándar ECMA-262. Parece que los dos se están volviendo muy similares con JavaScript al agregar oyentes de eventos para las instancias de Object centrales a través de métodos como freeze
y seal
en EMCAScript-262 5th edition y demás. Me preguntaba cuáles son las diferencias.¿Cuáles son las principales diferencias entre JavaScript y ActionScript 3?
Respuesta
En primer lugar, ActionScript 3 y JavaScript se definen en ECMA-262 por lo que tienen mucho en común. Ambos lenguajes presentan herencia prototipo, por ejemplo. Sin embargo, no es correcto que ActionScript implemente por completo ES4.
ActionScript implementa un par de funciones que no están definidas en ECMA-262 y algunas, pero definitivamente no todas, de ES4.
¿Qué agrega AS3 a ECMA-262?Esas son también las diferencias a JavaScript:
- dinámicamente y código estático de tipos
- Paquetes, Clases e Interfaces
- modelo de herencia OO estándar (no prototipo basado, con tipos estáticos)
- uint y int tipo de datos
- E4X (ECMA-357)
- de tipo seguro compilación condicional (ES4)
- vectorial. <T> tipo de datos (ES4)
Tal vez he olvidado algunas funciones. No estoy seguro de si XML, XMLList etc. ya están definidos en 262 o si vienen con 357.
Sin embargo, la diferencia clave es la biblioteca estándar. JavaScript viene con un par de clases predefinidas como DOMElement y adiciones dependientes del navegador. ActionScript tiene una biblioteca estándar bastante grande con funciones como la transmisión de video y es coherente en todas las plataformas.
Uno es tipo Safetly. Actionscript requiere que establezca un tipo para todos los objetos, y JavaScript no (para el caso, en JavaScript, una variable puede ser de un tipo y luego establecerse de inmediato en otro tipo).
Actionscript está orientado a objetos. Aunque puede tener esto en JavaScript, Actionscript permite la herencia de objetos, etc.
al igual que AS2 (yay!) –
Hay herencia en Javascript. Eso es herencia prototipo. – kennytm
No, no necesita escribir una referencia de objeto en ActionScript. Haz lo mismo que en JavaScript: var x = ... –
He estado programando tanto en ActionScript como en Javascript, y desde un punto de vista menos técnico, veo dos diferencias principales.
1) JavaScript es más poderoso. Puede hacer mucho más con el idioma porque no tiene un "compilador" o tipos. Existen algunos grandes frameworks como ExtJS y jQuery que intentan y simplifican las cosas para ti, pero incluso con ellos, puedes hacer una gran cantidad de daño si quieres.
2) ActionScript es mucho más restrictivo y, por lo tanto, mucho más fácil de mantener. Adobe hizo un gran trabajo para mantenerlo alejado de las partes difíciles de ECMAScript. Los objetos ECMAScript, la herencia de prototipos y los cierres son tres conceptos que realmente no necesita comprender para programar en ActionScript. Solo necesita comprender cómo usar el objeto "Clase" de Adobe. Para los usos simples, prefiero JavaScript. Sin embargo, una vez que el proyecto se amplía, depende de quién esté codificando. Si tuviera un equipo de 5 desarrolladores que programaran en una empresa incipiente, elegiría JavaScript en un abrir y cerrar de ojos. Sin embargo, en el perímetro de una gran corporación o academia, puede estar más seguro dependiendo de la plataforma de Adobe.
Espero que ayude.
* "Para usos simples, prefiero JavaScript." * ¿Perdón? Pensé que ActionScript no se puede usar fuera de Flash. – kennytm
Eso es verdad, no puede. Lo siento si insinué eso. La mitad de la razón por la que usaría JavaScript para proyectos pequeños es porque el usuario no necesitaría lidiar con flash. – Stephano
Buenos puntos Stephano. Apreciar la información. – Chin
Esencialmente, la principal diferencia que encuentro es que ActionScript es más un lenguaje detallado basado en clases de tipo estático donde JavaScript es un lenguaje prototípico.
Desafortunadamente no hay inferencia de tipos en ActionScript, por lo que usar Flex Builder da una advertencia cada vez que deja algo sin tipo que me parece innecesario y demasiado detallado, no solo lo hace más detallado que javascript, sino que encuentro un código equivalente ser más detallado que C#.
Sin embargo, la verbosidad adicional tiene mejoras en rendimiento y seguridad de tipo adicional en tiempo de compilación. Desafortunadamente, esto también aumenta considerablemente el tiempo de compilación, en las aplicaciones Java Script de cualquier tamaño estoy acostumbrado a recibir comentarios instantáneos, mientras que mi último proyecto de ActionScript tuvo un tiempo de compilación superior a 2 minutos.
Las diferencias clave son que ActionScript 3 admite herencia basada en clases y herencia de prototipos, impone enlaces de espacio de nombres entre nombres de clase y nombres de archivos, y no admite algunos métodos globales de JavaScript como eval
. Afortunadamente, puedes hacer varias cosas para cerrar la brecha.
Es posible ajustar el espacio de nombres global utilizando ES para ECMAScript o AS3 para ActionScript 3:
use namespace ES;
use namespace AS3;
Si está utilizando el espacio de nombres AS3, cualquier método sustituto debe utilizar el espacio de nombres AS3 y el atributo de anulación.
Si no está utilizando el espacio de nombres AS3, puede usar los métodos de prototipo y propertyIsEnumerable
.
Se puede utilizar de forma selectiva la versión AS3 espacio de nombre de una propiedad o método en una función dinámica:
var nums:Array = new Array(1, 2, 3);
nums.AS3::pop();
trace(nums); // output: 1,2
Para desactivar la herencia basada en la clase, también puede utilizar las siguientes opciones del compilador: compc -as3=false -strict=false -es=true
import *
class foo
{
dynamic function foo()
{
}
}
Si no utiliza el espacio de nombres AS3, una instancia de una clase central hereda las propiedades y métodos definidos en el objeto prototipo.
Si decide utilizar el espacio de nombres AS3, una instancia de una clase central hereda las propiedades y los métodos definidos en la definición de clase.
que aquí hay una características comunes entre ECMAScript-4 y ECMAScript-2017 o posterior:
Feature ES4/ES6+ ES4 Only Rest parameter ☑ Destructuring ☑ ByteArrays ☑ Class ☑ Interface ☑ Static fields ☑ Parameter default ☑ Rest Parameters ☑ Bound methods ☑ dynamic this value ☑ multiple catch clauses ☑ short-circuit-and (&&=) ☑ short-circuit-or (||=) ☑ Type Annotations ☑
Referencias
Desde el punto de vista del desarrollador, lo que más importa:
1) Jav ascript no es realmente OOP, no tiene NINGUNA palabra clave super, lo que significa que si anula (de alguna manera) algo, no puede llamarlo súper, y este es el factor decisivo para los programas complejos para los que OOP es la clave, y Actionscript3 es todo OOP, puede tener millones de líneas del código ActionScript3 trabajando juntas y bien mantenidas.
2) Actionscript3 se ejecuta en Flash Player que tiene solo una implementación de Adobe, esto significa que es constante todo el tiempo, todos los navegadores (siempre que esté instalado Flash Player), pero Javascript se ejecuta en los navegadores directamente, pero cada navegador tiene su propia implementación, lo que significa que su código Javascript debe probarse contra todos los navegadores específicos para garantizar el funcionamiento.
"JavaScript no es realmente OOP". JavaScript está muy orientado a objetos. De qué diablos estás hablando. "no se puede llamar [a un método anulado] a través de super". El hecho de que esperes modismos basados en clases en un lenguaje basado en prototipos es revelador. Creo que encontrarás JavaScript es más que capaz de polimorfismo. "factor decisivo para programas complejos para los que OOP es la clave" OOP no es la solución para todo. Creo que deberías buscar otros paradigmas de programación antes de hacer tales afirmaciones ingenuas. –
"Actionscript3 se ejecuta en Flash Player, que tiene solo una implementación ... pero Javascript ... cada navegador tiene su propia implementación, lo que significa que su código JavaScript debe probarse contra todos los navegadores específicos ..." Completar y decir tonterías. Todos los idiomas ampliamente utilizados están definidos por un estándar. El estándar define cómo se implementará el lenguaje, y cualquier implementación seria seguirá el estándar. Si necesita "prueba de función", está utilizando una extensión de proveedor. Esa no es la culpa del lenguaje por ser inconsistente; es suyo por usar funciones/extensiones no estándar. –
francamente, no es lo mismo, el script de acción cuz está cargado con EMQJ24, el nuevo lenguaje para el sitio web de alto desarrollo. mientras JS todavía está con EMCA22, la diferencia entre ellos es el estilo y el formato del código. y la secuencia de comandos de acción son lo suficientemente años, es por eso que la mayor parte del programador en la actualidad con CSX01 actualizado lenguaje de cSS, puede reconocer todo tipo de lenguaje sin línea.
¿Podría seguir con el inglés común? Me cuesta entender lo que escribiste. – MeanGreen
- 1. ¿Cuáles son las principales diferencias entre Meteor, Ember.js y Backbone.js?
- 2. ¿Cuáles son las principales diferencias entre EnhancedPatternLayout y PatternLayout?
- 3. ¿Cuáles son las principales diferencias entre fwrite y write?
- 4. ¿Cuáles son las principales diferencias entre Sinatra y Ramaze?
- 5. ¿Cuáles son las principales diferencias entre StringTemplate y FreeMarker?
- 6. ¿Cuáles son las principales diferencias entre Cocoa y CocoaTouch?
- 7. ¿Cuáles son las principales diferencias entre las API Repa 2 y 3?
- 8. ¿Cuáles son las principales diferencias entre las mejoras de CoffeeScript y Dart en JavaScript?
- 9. ¿Cuáles son las diferencias entre $ {} y # {}?
- 10. ¿Cuáles son las diferencias entre JSP, PHP, HTML5 y javascript?
- 11. ¿Cuáles son las diferencias entre el objeto JSON y JavaScript?
- 12. ¿Cuáles son las mayores diferencias entre fopen y curl?
- 13. Go-Scala-Go! ¿Cuáles son las principales diferencias?
- 14. ¿Cuáles son las diferencias entre PECL y PEAR?
- 15. ¿Cuáles son las diferencias entre HTTP 1.0 y 1.1?
- 16. ¿Cuáles son las diferencias entre PHP y Java?
- 17. ¿Cuáles son las diferencias de uso entre size_t y off_t?
- 18. ¿Cuáles son las diferencias actuales entre jQuery y Prototype?
- 19. Pasar de WPF a Silverlight: ¿Cuáles son las principales diferencias?
- 20. ¿Cuáles son las diferencias y similitudes entre MVC y MVVM?
- 21. ¿Cuáles son las principales diferencias entre HAML, SASS/Brújula y ERB?
- 22. ¿Cuáles son las principales diferencias entre los dialectos sql de mysql y oracle?
- 23. ¿Cuáles son las principales diferencias entre la programación para Windows XP y Vista?
- 24. ¿Cuáles son las principales diferencias entre Emacs Lisp y Common Lisp?
- 25. ¿Cuáles son las principales diferencias entre Rails 1.X y 2.X
- 26. ¿Cuáles son las principales diferencias entre Jetbrains 'MPS y Eclipse Xtext?
- 27. ¿Cuáles son las principales diferencias entre Socialauth, Scribe-Java y Spring Social?
- 28. Las diferencias entre JUnit 3 y JUnit 4
- 29. ¿Cuáles son las principales diferencias entre IE7 e IE8 que un desarrollador web debería saber?
- 30. ¿Cuáles son las diferencias entre osql, isql y sqlcmd?
No es realmente el mismo estándar. AS-3 es del ECMAScript 4 ahora muerto (a.k.a. Javascript 2.0), y el Javascript que vemos ahora es principalmente de ECMAScript 3. – kennytm