ventajas historia funciona espaƱol ejemplos desventajas descargar como caracteristicas javascript types

historia - javascript pdf



Es JavaScript un lenguaje sin tipo? (7)

He descubierto que algunas personas llaman a JavaScript un lenguaje "dinámicamente débilmente tipado", pero algunos incluso dicen "sin tipo". ¿Qué es realmente?


El problema aquí que confunde a muchos programadores es que definiciones como esta no están estandarizadas en alguna parte. El término lenguaje de programación sin tipo es ambiguo. ¿Se refiere a un idioma que no tiene tipos de datos o un lenguaje que es una variante sin tipo de cálculo lambda?

JavaScript / ECMAScript tiene un sistema de tipos y todos los dominios de sus funciones aceptarán cualquier tipo de especificación de referencia. Entonces eso significa que JavaScript tiene un solo tipo de datos, en realidad. Esa es una cuestión de implementación que es más importante para los programadores de JavaScript muy avanzados. El programador promedio de JavaScript solo se preocupa por los tipos de datos de lenguaje abstractos que han sido especificados por ECMAScript.

En el contexto del programador de todos los días, no del investigador o científico teórico de la computación, el término sin tipo es un nombre inapropiado porque la mayoría de la gente no está haciendo un cálculo lambda. Por lo tanto, el término confunde a las masas y parece declarar que JavaScript no tiene ningún tipo de datos, lo que simplemente no es cierto. Cualquiera que haya usado typeof sabe que JavaScript tiene sus propios tipos de datos de idioma:

var test = "this is text"; typeof(test);

rendimientos

"cuerda"

ECMAScript define los siguientes tipos para el lenguaje: undefined , null , string , boolean , number , object

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

Una designación más precisa para JavaScript sería tipeada implícitamente, tipada dinámicamente, o tipeada débilmente / flojamente (o alguna combinación de las mismas), en que JavaScript utiliza coerción de tipo en algunos casos lo que hace que el tipo sea implícito porque no tiene que especificar explícitamente el tipo de tus variables. Cae bajo tipeo débil porque, a diferencia de algunos lenguajes que distinguen entre flotante y entero, etc., solo usa un tipo de number para abarcar todos los números, y hace uso de la coerción de tipo mencionada anteriormente http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , en fuerte contraste con un lenguaje fuertemente tipado que tendría tipos de datos muy específicos (es decir, tendría que especificar int o float ).

Las definiciones de lenguajes de tipo estático y dinámico no están estandarizados, sin embargo, tampoco el tamaño de un byte cuando las computadoras estaban comenzando a evolucionar. La tipificación dinámica y estática se refiere a la presencia de ciertas características del lenguaje. Uno de los cuales es la comprobación de tipos en tiempo de ejecución , o lo que se llama comprobación dinámica de tipos . Si usó JavaScript, ya sabe que definitivamente espera hasta el momento de la ejecución para verificar los tipos, por lo que obtiene excepciones TypeError durante la ejecución de su código. Ejemplo aquí

Creo que la respuesta más votado es confundir el polimorfismo de las funciones de JavaScript con funciones que aceptarán literalmente cualquier cosa (como con variantes sin tipo de cálculo de Lambda), que es una falacia de asociación .


JavaScript está sin tipo:

http://no.gd/p/untyped-20120205-235300.jpg

Incluso Brendan Eich lo dice. En Twitter, respondió a un hilo que vinculaba a esta pregunta:

... los tipos académicos usan "sin tipo" para indicar "sin tipos estáticos" ...

Entonces, el problema es que hay algunas definiciones diferentes de sin tipo .

Se ha hablado de una definición en una de las respuestas anteriores: el tiempo de ejecución no etiqueta valores y solo trata cada valor como bits. JavaScript etiqueta los valores y tiene un comportamiento diferente basado en esas etiquetas. Entonces, obviamente, JavaScript no se ajusta a esta categoría.

La otra definición es de la teoría del lenguaje de programación (lo académico a lo que se refiere Brendan). En este dominio, sin tipo solo significa que todo pertenece a un solo tipo .

¿Por qué? Porque un lenguaje solo generará un programa cuando pueda demostrar que los tipos se alinean (también conocido como la correspondencia Curry-Howard ; los tipos son teoremas, los programas son pruebas). Esto significa en un lenguaje sin tipo:

  1. Un programa siempre se genera
  2. Por lo tanto, los tipos siempre coinciden
  3. Por lo tanto, solo debe haber un tipo

A diferencia de un lenguaje escrito a máquina:

  1. Un programa puede no ser generado
  2. Porque los tipos pueden no coincidir
  3. Porque un programa puede contener múltiples tipos

Así que ahí lo tienes, en PLT, sin tipear solo significa tipeado dinámicamente y mecanografiado solo significa tipeado estáticamente . JavaScript definitivamente está sin tipo en esta categoría.

Ver también:


JavaScript está débilmente tipado . Ciertamente no está "sin tipo", pero su naturaleza débilmente tipada permite mucha flexibilidad en términos de conversiones implícitas.

Tenga en cuenta que JavaScript también se escribe de forma dinámica. Este método de tipeo permite lo que se conoce como "tipado de pato" .

Para comparar, considere que JavaScript no está fuertemente tipado ni está tipado estáticamente. A veces, entender qué es algo no puede ayudarte a ver mejor lo que es.


Mientras está tipeado (puedes preguntar "typeof someVar" y aprender su tipo específico, es muy débil.

Dado:

var a = "5";

usted podría decir que a es una cadena. Sin embargo, si luego escribe:

var b = a + 10;

b es un int igual a 15, por lo que actuó como un int. Por supuesto, puedes escribir:

var c = a + "Hello World";

yc equivaldrá a "5Hello World", por lo que a está actuando nuevamente como una cuerda.


Para el punto del autor, JavaScript también se clasifica como de tipo dinámico . Wiki indica que los lenguajes de tipo dinámico se comprueban por tipo en tiempo de ejecución en lugar de en un compilador, mientras que los de tipo débilmente escrito se refieren a la capacidad de cambiar el tipo sobre la marcha dentro de su código. Entonces, sí, está escrito de forma dinámica Y débilmente tipado.


Recuerde que JavaScript le permite preguntar cuál es el tipo de typeof(your_variable) y comparar los tipos: 5==="5" devuelve false . Por lo tanto, no creo que puedas llamarlo sin tipo.

Está dinámicamente y (estimado como) débilmente tipado. Es posible que desee saber que utiliza la tipificación de Duck (consulte el enlace de andrew) y ofrece OOP a través de la creación de Prototyping lugar de las clases y la herencia.


fuerte / débil se puede pensar en relación a cómo el compilador, si corresponde, maneja el tipeo.

  • Escribir débilmente significa que el compilador, si corresponde, no aplica la escritura correcta. Sin la intercepción implícita del compilador, la instrucción producirá un error durante el tiempo de ejecución.

    "12345" * 1 === 12345 // string * number => number

    Fuertemente tipado significa que hay un compilador, y quiere un reparto explícito de cadena a entero .

    (int) "12345" * 1 === 12345

    En cualquier caso, algunas características del compilador pueden alterar implícitamente la instrucción durante el tiempo de compilación para realizar conversiones por usted, si puede determinar que es lo correcto.

    Hasta el momento, JavaScript se puede categorizar como No muy bien escrito. Eso significa que es de tipo débil o sin tipear.

dinámico / estático se puede pensar en relación a cómo las instrucciones de lenguaje manipulan tipos.

  • Tipeado dinámicamente significa que se aplica el tipo de valor , pero la variable simplemente representa cualquier valor de cualquier tipo.

    x = 12345; // number x = "string"; // string x = { key: "value" }; // object y = 123 + x; // error or implicit conversion must take place.

    Estáticamente tipeado significa que el tipo de variable se aplica con fuerza, y el tipo de valor es menos obligatorio.

    int x = 12345; // binds x to the type int x = "string"; // too late, x is an integer - error string y = 123; // error or implicit conversion must take place.

    Hasta ahora, JavaScript se puede categorizar como no estáticamente tipificado. Además, parece ser de tipo dinámico, si se escribe en absoluto. Entonces, necesitamos ver qué significa Typing.

Typed significa que el lenguaje distingue entre diferentes tipos como cadena , número , booleano , objeto , matriz , nulo , indefinido , etc. Además, cada operación está vinculada a tipos específicos. Entonces no puedes dividir un entero por una cadena .

2 / "blah" // produces NaN

Untados significa que la operación de dividir enteros por cadenas daría como resultado el tratamiento de los primeros cuatro bytes de cadena como un entero . Esto se debe a que las operaciones sin depósito se realizan directamente en bits, no hay tipos que observar. El resultado será algo bastante inesperado:

2 / "blah" // will be treated as 2 / 1500275048

Como JavaScript se comporta de acuerdo con la definición de ser tipificado, debe serlo. Y, por lo tanto, debe ser de tipo dinámico y débilmente tipado.

Si alguien afirma que JavaScript no tiene Untar, es meramente para la teoría académica, no para la aplicación práctica.