Обновление. Я перефразирую этот вопрос, потому что важным моментом для меня является идентификация литерала объекта:
Как я могу различить литерал объекта и любой другой объект Javascript (например, DOM node, объект Date и т.д.)? Как написать эту функцию:
function f(x) {
if (typeof x === 'object literal')
console.log('Object literal!');
else
console.log('Something else!');
}
Чтобы он печатал только Object literal!
в результате первого вызова ниже:
f({name: 'Tom'});
f(function() {});
f(new String('howdy'));
f('hello');
f(document);
Оригинальный вопрос
Я пишу функцию Javascript, предназначенную для принятия объектного литерала, строки или DOM node в качестве аргумента. Он должен обрабатывать каждый аргумент несколько иначе, но на данный момент я не могу понять, как различать DOM node и простой старый литерал объекта.
Вот очень упрощенная версия моей функции, а также тест для каждого типа аргумента, который мне нужно обрабатывать:
function f(x) {
if (typeof x == 'string')
console.log('Got a string!');
else if (typeof x == 'object')
console.log('Got an object literal!');
else
console.log('Got a DOM node!');
}
f('hello');
f({name: 'Tom'});
f(document);
Этот код будет записывать одно и то же сообщение для вторых двух вызовов. Я не могу понять, что включить в предложение else if
. Я пробовал другие варианты, такие как x instanceof Object
, которые имеют одинаковый эффект.
Я понимаю, что это может быть плохой дизайн API/кода с моей стороны. Даже если это так, я все равно хотел бы знать, как это сделать.