Recherche…


Type de

typeof est la fonction "officielle" que l'on utilise pour obtenir le type en javascript, mais dans certains cas, cela peut donner des résultats inattendus ...

1. cordes

typeof "String" ou
typeof Date(2011,01,01)

"chaîne"

2. Nombres

typeof 42

"nombre"

3. Bool

typeof true (valeurs valides true et false )

"booléen"

4. objet

typeof {} ou
typeof [] ou
typeof null ou
typeof /aaa/ ou
typeof Error()

"objet"

5. fonction

typeof function(){}

"fonction"

6. indéfini

var var1; typeof var1

"indéfini"

Obtenir le type d'objet par nom de constructeur

Quand on avec typeof opérateur on obtient de type object tombe dans la catégorie un peu ... tu étais

En pratique, vous devrez peut-être vous limiter à quel type d'objet il s'agit et utiliser un nom de constructeur d'objet pour savoir quelle est l'objet de l'objet: Object.prototype.toString.call(yourObject)

1. ficelle

Object.prototype.toString.call("String")

"[chaîne d'objets]"

2. nombre

Object.prototype.toString.call(42)

"[Numéro d'objet]"

3. Bool

Object.prototype.toString.call(true)

"[objet booléen]"

4. objet

Object.prototype.toString.call(Object()) ou
Object.prototype.toString.call({})

"[objet Objet]"

5. fonction

Object.prototype.toString.call(function(){})

"[Fonction d'objet]"

6. date

Object.prototype.toString.call(new Date(2015,10,21))

"[objet date]"

7. Regex

Object.prototype.toString.call(new RegExp()) ou
Object.prototype.toString.call(/foo/);

"[objet RegExp]"

8. tableau

Object.prototype.toString.call([]);

"[objet Array]"

9. Null

Object.prototype.toString.call(null);

"[objet Null]"

10. indéfini

Object.prototype.toString.call(undefined);

"[objet non défini]"

11. erreur

Object.prototype.toString.call(Error());

"[Erreur d'objet]"

Trouver la classe d'un objet

Pour savoir si un objet a été construit par un constructeur donné ou par un constructeur, vous pouvez utiliser la commande instanceof :

//We want this function to take the sum of the numbers passed to it
//It can be called as sum(1, 2, 3) or sum([1, 2, 3]) and should give 6
function sum(...arguments) {
    if (arguments.length === 1) {
        const [firstArg] = arguments
        if (firstArg instanceof Array) { //firstArg is something like [1, 2, 3]
            return sum(...firstArg) //calls sum(1, 2, 3)
        }
    }
    return arguments.reduce((a, b) => a + b)
}

console.log(sum(1, 2, 3))   //6
console.log(sum([1, 2, 3])) //6
console.log(sum(4))         //4

Notez que les valeurs primitives ne sont considérées comme des instances d'aucune classe:

console.log(2 instanceof Number)        //false
console.log('abc' instanceof String)    //false
console.log(true instanceof Boolean)    //false
console.log(Symbol() instanceof Symbol) //false

Chaque valeur de JavaScript, à part null et undefined possède également une propriété constructor qui stocke la fonction utilisée pour la construire. Cela fonctionne même avec les primitives.

//Whereas instanceof also catches instances of subclasses,
//using obj.constructor does not
console.log([] instanceof Object, [] instanceof Array)           //true true
console.log([].constructor === Object, [].constructor === Array) //false true

function isNumber(value) {
    //null.constructor and undefined.constructor throw an error when accessed
    if (value === null || value === undefined) return false
    return value.constructor === Number
}
console.log(isNumber(null), isNumber(undefined))                  //false false
console.log(isNumber('abc'), isNumber([]), isNumber(() => 1))     //false false false
console.log(isNumber(0), isNumber(Number('10.1')), isNumber(NaN)) //true true true


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow