Szukaj…


typ

typeof to „oficjalna” funkcja używana do uzyskania type w javascript, jednak w niektórych przypadkach może przynieść nieoczekiwane rezultaty ...

1. Struny

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

"strunowy"

2. Liczby

typeof 42

"numer"

3. Bool

typeof true (prawidłowe wartości true i false )

„boolean”

4. Obiekt

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

"obiekt"

5. Funkcja

typeof function(){}

"funkcjonować"

6. Niezdefiniowany

var var1; typeof var1

"nieokreślony"

Pobieranie typu obiektu według nazwy konstruktora

Kiedy jeden z operatorem typeof dostaje object typu, to należy do kategorii odpadów ...

W praktyce może być konieczne zawężenie go do tego, czym faktycznie jest „obiekt”, a jednym ze sposobów jest użycie nazwy konstruktora obiektu, aby uzyskać smak tego obiektu: Object.prototype.toString.call(yourObject)

1. Ciąg

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

„[ciąg obiektowy]”

2. Liczba

Object.prototype.toString.call(42)

„[numer obiektu]”

3. Bool

Object.prototype.toString.call(true)

„[obiekt Boolean]”

4. Obiekt

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

„[Object Object]”

5. Funkcja

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

„[funkcja obiektu]”

6. Data

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

„[data obiektu]”

7. Regex

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

„[obiekt RegExp]”

8. Tablica

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

„[obiekt Array]”

9. Brak

Object.prototype.toString.call(null);

„[obiekt Null]”

10. Niezdefiniowane

Object.prototype.toString.call(undefined);

„[obiekt niezdefiniowany]”

11. Błąd

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

„[błąd obiektu]”

Znajdowanie klasy obiektu

Aby sprawdzić, czy obiekt został skonstruowany przez określonego konstruktora, czy dziedziczącego po nim, możesz użyć komendy 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

Zauważ, że wartości pierwotne nie są uważane za wystąpienia żadnej klasy:

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

Każda wartość w JavaScript oprócz null i undefined ma również właściwość constructor przechowującą funkcję użytą do jej skonstruowania. Działa to nawet z prymitywami.

//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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow