Поиск…


тип

typeof - это «официальная» функция, которая используется для получения type в javascript, однако в некоторых случаях это может привести к неожиданным результатам ...

1. Строки

typeof "String" или
typeof Date(2011,01,01)

«Строка»

2. Числа

typeof 42

"число"

3. Bool

typeof true (действительные значения true и false )

«Логическое»

4. Объект

typeof {} или
typeof [] или
typeof null или
typeof /aaa/ или
typeof Error()

«Объект»

5. Функция

typeof function(){}

«Функция»

6. Неопределенный

var var1; typeof var1

«Неопределенные»

Получение типа объекта по имени конструктора

Когда один с typeof оператором получает object типа, он попадает в некоторую категорию категории ...

На практике вам может понадобиться сузить его до какого-то «объекта», который есть на самом деле, и один из способов сделать это - использовать имя конструктора объекта, чтобы получить тот вкус объекта, который он на самом деле: Object.prototype.toString.call(yourObject)

1. Строка

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

"[object String]"

2. Номер

Object.prototype.toString.call(42)

"[номер объекта]"

3. Bool

Object.prototype.toString.call(true)

"[object Boolean]"

4. Объект

Object.prototype.toString.call(Object()) или
Object.prototype.toString.call({})

"[Объект Object]"

5. Функция

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

"[функция объекта]"

6. Дата

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

"[дата объекта]"

7. Регулярное выражение

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

"[объект RegExp]"

8. Массив

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

"[object Array]"

9. Null

Object.prototype.toString.call(null);

"[объект Null]"

10. Неопределенные

Object.prototype.toString.call(undefined);

"[объект Undefined]"

11. Ошибка

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

"[ошибка объекта]"

Поиск класса объекта

Чтобы определить, был ли объект сконструирован определенным конструктором или наследованием от него, вы можете использовать команду 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

Обратите внимание, что примитивные значения не считаются экземплярами любого класса:

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

Каждое значение в JavaScript, кроме null и undefined также имеет свойство constructor сохраняющее функцию, которая была использована для его построения. Это даже работает с примитивами.

//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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow