type tutorial funciona descargar definicion como change caracteristicas javascript ecma262

funciona - javascript tutorial



Tipos de JavaScript (7)

Según http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf , JavaScript tiene 6 tipos: undefined , null , boolean , string , number y object .

var und; console.log(typeof und); // <-- undefined var n = null; console.log(typeof n); // <--- **object**! var b = true; console.log(typeof b); // <-- boolean var str = "myString" console.log(typeof str); // <-- string var int = 10; console.log(typeof int); // <-- number var obj = {} console.log(typeof obj); // <-- object

Pregunta 1:

¿Por qué es nulo el tipo de object lugar de null ?

Pregunta 2:

¿Qué pasa con las funciones?

var f = function() {}; console.log(typeof f); // <-- function

La variable f tiene tipo de function . ¿Por qué no se especifica en la especificación como un tipo separado?

Gracias,


Acerca de typeof null == ''object'' , este es un error que viene desde los primeros días y, desafortunadamente, este error permanecerá con nosotros durante mucho tiempo, ya era demasiado tarde para corregirlo en la especificación de la edición de ECMAScript .

Acerca de las funciones , son solo objetos, pero tienen una propiedad interna especial llamada [[Call]] que se usa internamente cuando se invoca una función.

El operador typeof distingue entre objetos y funciones simples solo al verificar si el objeto tiene esta propiedad interna.


Para completar, tenga en cuenta que la mejor forma actual de verificar la información de tipo es algo como esto:

var typeInfo = Object.prototype.toString.call(yourObject);

Eso te da una cadena que se parece a "[object Something]", donde "Something" es un nombre de tipo.


Se debe a que typeof está definido para devolver "objeto" si la entrada es null , y devolver "función" si la entrada es llamable. (Ver 11.4.3 El tipo de operador.)

No sé por qué el estándar se define así ( y Crockford dijo que está mal ). Tal vez la compatibilidad hacia atrás.


También hay Array.prototype también.

  • Objeto.prototipo
  • Array.prototipo
  • Función.prototipo
  • Número.prototipo
  • String.prototype
  • Prototipo de Boolean

Crockford dice no usar:

  • nuevo número()
  • nueva cadena ()
  • nuevo booleano ()

nulo es un valor especial, no es falso, no es 0, o la cadena vacía o NaN o indefinida.

nulo es lo que obtienes cuando buscas un objeto que no está allí, no una propiedad no definida de un objeto, sino la cosa en sí.

un párrafo con un textNode devolverá un valor nulo para los nodos nextSibling, una expresión regular que no coincida devuelve un valor nulo en lugar de la matriz y así sucesivamente.

tal vez debería tener su propio tipo, pero luego comienza a ser algo, algo con un tipo, en lugar de la ausencia de un objeto.


typeof null === "object" porque la especificación lo dice, pero esto es un error desde la primera versión de JavaScript. (como dice KennyTM arriba).

typeof f === "function" porque, sin un try / catch , no hay otra forma confiable e infalible de determinar si algo es reclamable. El uso de la función f.constructor === Function podría funcionar, pero creo que no está garantizado que así sea.


Respuesta a la pregunta 1:

Una propiedad, cuando no tiene definición, es indefinida. La razón por la que null es un Objeto es para que una propiedad pueda existir sin valor y aún tenga una definición.