我想要得到的是:

document.createElement('div')  //=> true
{tagName: 'foobar something'}  //=> false

在我自己的脚本中,我过go 只使用这个,因为我从来不需要tagName作为属性:

if (!object.tagName) throw ...;

因此,对于第二个对象,我提出了以下快速解决方案——基本上是有效的

问题是,它依赖于浏览器强制执行只读属性,而不是所有浏览器都强制只读属性.

function isDOM(obj) {
  var tag = obj.tagName;
  try {
    obj.tagName = '';  // Read-only for DOM, should throw exception
    obj.tagName = tag; // Restore for normal objects
    return false;
  } catch (e) {
    return true;
  }
}

有好吃的替身吗?

推荐答案

这可能会令人感兴趣:

function isElement(obj) {
  try {
    //Using W3 DOM2 (works for FF, Opera and Chrome)
    return obj instanceof HTMLElement;
  }
  catch(e){
    //Browsers not supporting W3 DOM2 don't have HTMLElement and
    //an exception is thrown and we end up here. Testing some
    //properties that all elements have (works on IE7)
    return (typeof obj==="object") &&
      (obj.nodeType===1) && (typeof obj.style === "object") &&
      (typeof obj.ownerDocument ==="object");
  }
}

这是DOM, Level2人的一部分.

Update 2:这是我在自己的库中实现它的方式:

//Returns true if it is a DOM node
function isNode(o){
  return (
    typeof Node === "object" ? o instanceof Node : 
    o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
  );
}

//Returns true if it is a DOM element    
function isElement(o){
  return (
    typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
    o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName==="string"
);
}

Javascript相关问答推荐

如果没有尾随斜线,托管在收件箱中的React/Vite将无法工作

是否有方法在OpenWeatherMap API中获取过go 的降水数据?

将json数组项转换为js中的扁平

窗口.getComputedStyle()在MutationObserver中不起作用

如何使用JavaScript将文本插入空div

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

如何从隐藏/显示中删除其中一个点击?

如何使onPaste事件与可拖动的HTML元素一起工作?

不能将空字符串传递给cy.containes()

如何使用JavaScript拆分带空格的单词

用JS从平面文件构建树形 struct 的JSON

在Matter.js中添加从点A到另一个约束的约束

Reaction组件在本应被设置隐藏时仍显示

MongoDB受困于太多的数据

为什么延迟在我的laravel项目中不起作用?

如何通过Axios在GraphQL查询中发送数组

如何在每隔2分钟刷新OKTA令牌后停止页面刷新

为什么我的SoupRequest";被重置为初始值,以及如何修复它?

TabNavigator和StackNavigator之间的Reaction Native中的导航问题

将字符串解释为数字;将其重新编码为另一个基数