2011-09-08 1 views

Répondre

4

Si ce cas, vous pouvez utiliser typeof[mozilla docs] pour vérifier si la valeur est un nombre ou non.

if (typeof z === "number") { 
    alert("I'm the property!"); 
} else { 
    alert("I'm the object!"); 
} 

typeof x est utile si x est une "number" primitive, "boolean", "string", "undefined" ou "function", mais vous avez besoin des contrôles plus compliqués pour d'autres types.

Il est également possible que cette vérification se comporte de manière inattendue si quelqu'un utilise un type d'encapsuleur d'objet au lieu d'un type primitif. patrick dw's excellent answer fournit une solution qui peut gérer cela.

0

utilisation typeof

Z = Q; 
typeof Z == "object"; //true 
Z = Q["name"]; 
typeof Q == "number"; //true 
0

Oui, comme les messages précédents disent: 'typeof' est la méthode que vous voulez.

Cela vaut la peine de savoir que typeof renvoie une chaîne, même si le type n'est pas défini ou booléen par exemple, n'oubliez pas de l'utiliser dans vos vérifications.

2

Une plus sûre et une approche plus souple que typeof est de trouver sa propriété interne [[classe]] en appelant Object.prototype.toString avec Z défini comme contexte d'appel, comme ceci:

var type = Object.prototype.toString.call(Z); // [object ???] 

le résultat être sous la forme de [object Class], comme dans:

[object Object] 
[object Array] 
[object Number] 
[object Boolean] 
[object String] 

Vous pouvez facilement le faire en fonction, quelque chose comme ceci:

function getType(x) { 
    return x === void 0 ? 'undefined' : 
      x === null ? 'null' : 
      Object.prototype.toString.call(x).slice(8, -1).toLowerCase(); 
} 

Ceci renvoie un résultat de chaîne en minuscule pour le type que vous voulez:

"string" 
"number" 
"array" 
// ...etc 

J'ai fait des tests explicites pour null et undefined parce que je pense qu'il peut y avoir des incompatibilités de navigateur avec ceux-ci, mais je suis pas certain. Quoi qu'il en soit, ils sont assez faciles à tester explicitement.

Alors vous voulez l'utiliser comme:

if(getType(Z) === "string") { 
    // do something 
} else { 
    // do something else 
} 

La raison pour cela est plus sûr est que si une chaîne par exemple arrive à être donné comme son emballage d'objet, typeof retournera "object" au lieu de "string".

typeof new String("test"); // "object" 

, il couvre également le cas de Array, qui sera toujours retour "object" avec typeof.