更新:我正在改写这个问题,因为对我来说重点是识别对象文字:
如何区分对象文字和任何其他Javascript对象(例如DOM节点,Date对象等)?我该怎么写这个函数:
function f(x) {
if (typeof x === 'object literal')
console.log('Object literal!');
else
console.log('Something else!');
}
Run Code Online (Sandbox Code Playgroud)
因此它只会Object literal!在下面的第一个调用中打印出来:
f({name: 'Tom'});
f(function() {});
f(new String('howdy'));
f('hello');
f(document);
Run Code Online (Sandbox Code Playgroud)
原始问题
我正在编写一个Javascript函数,用于接受对象文字,字符串或DOM节点作为其参数.它需要稍微不同地处理每个参数,但目前我无法弄清楚如何区分DOM节点和普通的旧对象文字.
这是我的函数的一个大大简化的版本,以及我需要处理的每种参数的测试:
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);
Run Code Online (Sandbox Code Playgroud)
此代码将为后两个调用记录相同的消息.我无法弄清楚该else if条款中包含哪些内容.我尝试过其他类似的变化x instanceof Object也有同样的效果.
据我所知,这可能是我的API /代码设计不好.即使是这样,我仍然想知道如何做到这一点.