2016-05-22 2 views
0

J'essaie d'obtenir le type d'un argument en n'utilisant pas le typeof. Aussi (sa partie d'un exercice) je dois utiliser Object.prototype.toString ...Object.prototype.toString() - essaie d'obtenir 'String' au lieu de [object String]

Appel de la fonction devrait retourner (par exemple si c'est une chaîne) "String". Cependant, mon code renvoie String]

Comment puis-je retirer le support? Merci!

function types(x){ 

    var array = Object.prototype.toString.call(x); 
    var arr= array.split(" "); 
    return arr[1]; 
} 

types ("hello");

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr – Marty

+3

Juste 'Object.prototype.toString.call (x) .slice (8, -1) ' – Bergi

+0

Cela ne fonctionne pas! Je veux bien sûr qu'elle soit générale - pour une chaîne, elle doit retourner "String" pour Number "Number" etc. Si j'utilise substring .substring (start, end) -par exemple "Number" et "String" ont une longueur différente donc c'est inutile – learningcoding

Répondre

0

Je ne sais pas pourquoi vous devez utiliser Object.prototype.toString car une chaîne native n'est pas un objet. Si vous le forcez sur une chaîne, alors il retournera le "[object String]".

Si vous voulez que le type d'une variable, vous pouvez simplement utiliser la fonction suivante

var types = x => x.contructor.name; 

Si vous devez, vous utilisez les touches suivantes

var types = x => Object.prototype.toString.call(x).match(/\[object (.*)\]/)[1]; 

Ceci est inefficace vous devez d'abord encapsulez la variable d'origine avec une variable d'objet, puis appelez sa fonction toString, suivie d'un regExp (ou substr).

+0

OP dit que cela fait partie d'un exercice et qu'ils doivent utiliser 'toString' – Phil

0

Cela renverra String. Utilise slice() pour enlever la fuite ]

function types(x) { 
    var array = Object.prototype.toString.call(x); 
    var arr = array.split(" "); 
    return arr[1].slice(0, -1); 
} 
console.log(types('hello')) // String