Javascript. Типовое сравнение объектов

Объявим пространство имен NS (регистрозависим)

var NS = {};

Далее объявим в нем конструктор Test и создадим на его основе экземпляр t

NS.Test = function() {
    this.name = 'Test';
};

NS.t = new NS.Test();


Далее создадим объект o, используя стандартный объект Object

NS.o = {};

Для определения принадлежности того или иного экземпляра своему "классу" (в js понятие класса условно), можно воспользоваться следующими стандартными способами

NS.t.constructor == NS.Test // true
NS.t instanceof NS.Test     // true

NS.o.constructor == Object     // true
NS.o instanceof Object         // true


Если попытаться сопоставить объект через явно объявленный конструктор с объектом Object,
то можно получить следующие результаты

NS.t.constructor == Object     // false
NS.t instanceof Object         // true


Первое сравнение вернуло false, это и понятно, так как этот конструктор явно объявлен и ссылается на функцию Test(), второе сравнение истинно потому, что сам конструктор является объектом, что уж там, в javascripte практически все представлено объектом, такова его реализация. В подтверждение сказанного приведу следующее сравнение

NS.Test.constructor == Object     // false
NS.Test instanceof Object         // true


В виде дополнения, приведу список встроенных в javascript объектов

// Массив пронумерованных элементов, также может служить стеком или очередью
Array

// Объект для булевых значений
Boolean

// Функции для работы с датой и временем
Date

// объект для представления ошибок
Error

// Ошибка при выполнении функции eval
EvalError

// Каждая функция в яваскрипт является объектом класса Function
Function

// Встроенный объект, предоставляющий константы и методы для математических вычислений
Math

// Объект для работы с числами
Number

// Базовый объект javascript
Object

// Ошибка, когда число не лежит в нужном диапазоне
RangeError

// Ошибку при ссылке на несуществующую переменную
ReferenceError

// Позволяет работать с регулярными выражениями.
RegExp

// Базовый объект для строк. Позволяет управлять текстовыми строками, форматировать их и выполнять поиск строк
String

// Ошибка при интерпретации синтаксически неверного кода
SyntaxError

// Ошибка в типе значения
TypeError

// Ошибка при некорректном URI
URIError


Небольшой пример сверки типа объекта

var stack = [];

if (stack instanceof Array) {
    stack.push(1);
    stack.push(2);
    stack.push(3);
}