A cosa serve se restituisce sempre "oggetto" come tipo?Perché il tipo di javascript restituisce sempre "oggetto"?
--update
sempre per elementi o elenchi.
A cosa serve se restituisce sempre "oggetto" come tipo?Perché il tipo di javascript restituisce sempre "oggetto"?
--update
sempre per elementi o elenchi.
Il tipo di J di JS non restituisce sempre "oggetto", ma restituisce l'oggetto per cose che le persone potrebbero non considerare come oggetti - cioè matrici, e anche, stranamente, per null.
Per gli array questo è corretto, perché per quanto riguarda JS, gli array sono oggetti; sono la stessa cosa La matrice è solo un'altra classe e puoi creare un'istanza di oggetti di tipo Array, ma vengono comunque considerati come oggetti.
This page ha un elenco di tipi in JS, insieme alla risposta che otterrete per ognuno di essi da typeof. Ha anche qualche codice JS per sovrascrivere la funzione typeof con una che restituisce informazioni più utili. Se sei preoccupato che non sia utile, potresti implementare qualcosa del genere, se lo desideri.
Google Chrome restituisce ora 'function' per me, quando fornisco 'typeof Array' (o qualsiasi altro tipo di Array, come Int8Array o Float32Array) ... –
Link is dead:/ –
Esso non restituisce sempre "oggetto":
alert(typeof "hello");
Detto questo, un trucco (forse) più utile per esaminare gli oggetti è quello di utilizzare Object.prototype.toString.call()
e guardare il risultato:
var t = Object.prototype.toString.call(itIsAMystery);
Questo ti darà una stringa come [object Foo]
con "Foo"
il costruttore (credo)
la parte interessante. Per i tipi "nativi" (come Data o Stringa) si ottiene di nuovo il nome del costruttore.
* ... con" Foo "che sta ... * il valore della proprietà interna di' [[Class]] ', che rappresenta - * per gli oggetti nativi * - una specifica definita * classificazione * -non proprio un * tipo *! - e per gli oggetti host in sostanza potrebbe essere qualsiasi cosa .... – CMS
Wow grazie a @CMS! – Pointy
Si noti che l'operatore 'typeof' _viene_ restituisce sempre' "oggetto" 'per lo scope' this' di una funzione _ (a meno che l'ambito non sia una funzione) _. Vedi ["Perché typeof this return" object "?"] (Http://stackoverflow.com/questions/4390658/why-does-typeof-this-return-object) – Phrogz
Devi capire che il sistema di tipi in JavaScript è dinamico con alcuni tipi "primitivi" su cui costruire. Trattando tutti gli oggetti complessi come il tipo "oggetto" ciò consente di digitare e chiamare i metodi senza dover necessariamente conoscere il tipo dell'oggetto che viene passato assumendo che quel tipo abbia la chiamata alla funzione implementata. In un linguaggio di programmazione dinamico tutto è un "oggetto".
Le lingue duck tipate non sempre omettono i tipi - ad esempio, Python è duck dattilografato e ha un tipo utile() che ti dice il tipo di oggetto. – mikemaccana
Potresti riuscire a passare qualsiasi tipo che ti piace ovunque, ma ciò non significa che ci siano _no_ tipi diversi dall'oggetto. – byxor
Nella mia esperienza, il problema principale con typeof deriva dalla distinzione tra array, oggetti e null (tutti restituiscono "oggetto").
Per fare questo, ho primo controllo typeof poi verifico il caso nullo o il costruttore "dell'oggetto", in questo modo:
for (o in obj) {
if (obj.hasOwnProperty(o)) {
switch (typeof obj[o]) {
case "object":
if (obj[o] === null) {
//do somethign with null
} else {
if (obj[o].constructor.name === "Array") {
//do something with an Array
} else {
//do something with an Object
}
}
break;
case "function":
//do something with a function
break;
default:
//do something with strings, booleans, numbers
break;
}
}
}
Uno ha bisogno di essere un po 'attenti con l'operatore typeof. Restituisce "oggetto" per un nullo, "numero" per NaN, "numero" per Infinito, "oggetto" per un "nuovo numero (1)" e "oggetto" per un array.
Quando si verifica l'esistenza di una variabile (tipo di variabile! == "indefinito") a volte è necessario prima controllare se (variabile == null) poiché typeof restituisce "oggetto" per una variabile assegnata a null.
Questo è un po 'ovvio, ma bisogna anche fare attenzione a non invocare una funzione durante il controllo di tipoof perché verrà riportato il tipo di ritorno della funzione e non la "funzione".
Questo è stato utile per la mia situazione in quanto avevo numeri, stringhe, null e oggetti su cui stavo passando. Sono stato in grado di isolare gli oggetti dai null per trasformarli. –
Per aggiungersi con gli altri, typeof restituisce sia gli oggetti che le primitive. Ci sono 5 tipi primitivi in javascript: undefined, null, boolean, string e number. Tutto il resto è un oggetto. Quando typeof viene applicato a qualsiasi tipo di oggetto diverso da Function, restituisce semplicemente "object".Quando applicato a una funzione, restituisce un oggetto funzione.
Così, ad esempio:
di esporre ulteriormente la risposta di punta, non v'è in ogni JavaScript Object una proprietà interna nota come [[Classe]] in ECMAScript 5. Al fine per visualizzare il valore reale dell'oggetto, è possibile fare riferimento alla proprietà [[Classe]] utilizzando: Object.prototype.toString
. Per evitare che alcuni degli oggetti built-in specializzati sovrascrivano toString, si utilizza il metodo interno di Call che rivelerà il tipo di oggetto effettivo.
Così, invece di ottenere l'oggetto generico di ritorno da toString:
var dateObject = Object.prototype.toString(new Date);
document.write(dateObject);//[object Object]
è possibile ottenere il tipo di oggetto reale utilizzando chiamate:
var dateObject = Object.prototype.toString.call(new Date);
document.write(dateObject);//[object Date]
E 'utile perché non lo fa. –
Alcuni client restituiscono typeof = 'function' per nodeLists restituiti da metodi come 'getElementsByTagName'. Lo dico perché recentemente mi ha morso quando lavoro con Safari su Windows. – kennebec
'console.log (typeof" foo "); // string' & 'console.log (typeof String (" foo ")); // string' 'console.log (typeof new String (" foo ")); // object' Presta attenzione all'uso di 'new' – Jowen