una tablas tabla que obtener ejemplos datos con aprender agregar javascript

tablas - obtener datos de una tabla html javascript



¿Por qué 4 no es una instancia de Número? (5)

Sólo curioso:

  • 4 instancia de Número => falso
  • nuevo número (4) instanceof Number => true?

¿Por qué es esto? Lo mismo con cadenas:

  • ''some string'' instanceof String devuelve falso
  • new String(''some string'') instanceof String => true
  • String(''some string'') instanceof String también devuelve falso
  • (''some string'').toString instanceof String también devuelve false

Para los tipos objeto, matriz o función, el operador instanceof funciona como se espera. Simplemente no sé cómo entender esto.

[ nuevas ideas ]

Object.prototype.is = function() { var test = arguments.length ? [].slice.call(arguments) : null ,self = this.constructor; return test ? !!(test.filter(function(a){return a === self}).length) : (this.constructor.name || (String(self).match ( /^function/s*([^/s(]+)/im ) || [0,''ANONYMOUS_CONSTRUCTOR'']) [1] ); } // usage var Newclass = function(){}; // anonymous Constructor function var Some = function Some(){}; // named Constructor function (5).is(); //=> Number ''hello world''.is(); //=> String (new Newclass()).is(); //=> ANONYMOUS_CONSTRUCTOR (new Some()).is(); //=> Some /[a-z]/.is(); //=> RegExp ''5''.is(Number); //=> false ''5''.is(String); //=> true


Como se afirma en la respuesta de Christoph, los literales de cadena y número no son lo mismo que los objetos de cadena y número. Si usa cualquiera de los métodos de Cadena o Número en el literal, diga

''a string literal''.length

El literal se convierte temporalmente en un objeto, el método se invoca y el objeto se descarta.
Los literales tienen algunas ventajas claras sobre los objetos.

//false, two different objects with the same value alert( new String(''string'') == new String(''string'') ); //true, identical literals alert( ''string'' == ''string'' );

¡Siempre use literales para evitar comportamientos inesperados!
Puede usar Number () y String () para encasillar si necesita:

//true alert( Number(''5'') === 5 ) //false alert( ''5'' === 5 )


Este es un matiz de Javascript que descubrí que atrapa un poco. instanceof del operador siempre dará como resultado falso si el LHS no es un tipo de object .

Tenga en cuenta que el new String(''Hello World'') no da como resultado un tipo de string sino que es un object . El new operador siempre da como resultado un objeto. Veo este tipo de cosas:

function fnX(value) { if (typeof value == ''string'') { //Do stuff } } fnX(new String(''Hello World''));

La expectativa es que " Do Stuff " sucederá pero no porque el tipo del valor es objeto.


Puede intentar evaluar:

>>> typeof("a") "string" >>> typeof(new String("a")) "object" >>> typeof(4) "number" >>> typeof(new Number(4)) "object"


value instanceof Constructor es lo mismo que Constructor.prototype.isPrototypeOf(value) y ambos comprueban el [[Prototype]] - cadena de value para las ocurrencias de un objeto específico.

Las cadenas y los números son valores primitivos , no objetos y, por lo tanto, no tienen un [[Prototipo]], por lo que solo funcionarán si los envuelve en objetos normales (denominados ''boxeo'' en Java).

Además, como habrás notado, String(value) y new String(value) hacen cosas diferentes: si llamas a las funciones de constructor de los tipos incorporados sin usar el new operador, intentan convertir (''fundir'') el argumento en el tipo específico. Si usa el new operador, crean un objeto contenedor.

new String(value) es más o menos equivalente a Object(String(value)) , que se comporta de la misma manera que el new Object(String(value)) .

Algunos más sobre tipos en JavaScript: ECMA-262 define los siguientes tipos primitivos: Indefinido , Nulo , Booleano , Número y Cadena . Además, está el tipo Object para cosas que tienen propiedades.

Por ejemplo, las funciones son de tipo Object (solo tienen una propiedad especial llamada [[Call]]), y null es un valor primitivo de tipo Null . Esto significa que el resultado del operador typeof realmente no devuelve el tipo de valor ...

Además, los objetos JavaScript tienen otra propiedad llamada [[Class]]. Puede obtenerlo a través de Object.prototype.toString.call(value) (esto devolverá ''[object Classname ]'' ). Las matrices y las funciones son del tipo Object , pero sus clases son Array y Function .

La prueba para la clase de un objeto dada arriba funciona cuando la instanceof falla (por ejemplo, cuando los objetos se pasan entre los límites de ventana / marco y no comparten los mismos prototipos).

Además, es posible que desee verificar esta versión mejorada de typeof :

function typeOf(value) { var type = typeof value; switch(type) { case ''object'': return value === null ? ''null'' : Object.prototype.toString.call(value). match(/^/[object (.*)/]$/)[1] case ''function'': return ''Function''; default: return type; } }

Para las primitivas, devolverá su tipo en minúsculas , para los objetos, devolverá su clase en mayúsculas y minúsculas .

Ejemplos:

  • Para las primitivas de tipo Número (p. Ej. 5 ), devolverá ''number'' , para objetos de envoltura de clase Número (por ejemplo, new Number(5) ), devolverá ''Number'' ;

  • Para las funciones, devolverá ''Function'' .

Si no desea discernir entre los valores primitivos y los objetos del contenedor (para cualquier cosa, probablemente una mala razón), use typeOf(...).toLowerCase() .

Los errores conocidos son algunas funciones incorporadas en IE, que se consideran ''Object'' y un valor de retorno ''unknown'' cuando se usan con algunos objetos COM +.


En el caso de los números primitivos, el método isNaN también puede ayudarlo.