nodetype 是唯一可靠的节点物理类型标识,应优先用于判断;nodename 仅作辅助参考,不可单独依赖,因其返回值随节点类型和上下文变化。

直接用 nodeType 判断节点的物理类型最准确,nodeName 仅作辅助参考,不可单独依赖。
nodeType 是唯一可靠的物理类型标识
nodeType 是只读数值属性,由 DOM 规范明确定义,每个数字对应一种底层节点类型,不会因浏览器或上下文变化:
-
1 → 元素节点(
Element),如<div>、<code><p></p> -
3 → 文本节点(
Text),包含纯字符内容,不含标签 -
8 → 注释节点(
Comment),如<!-- hello --> -
9 → 文档节点(
Document),即document对象本身 -
11 → 文档片段(
DocumentFragment) - 元素节点:返回大写标签名(如
"DIV"),在 HTML 文档中不区分大小写;XML 中则保留原始大小写 - 文本节点:固定为
"#text" - 注释节点:固定为
"#comment" - 文档节点:固定为
"#document" - 文档类型节点(
DOCTYPE):返回如"html"或"!DOCTYPE"(浏览器实现略有差异) - 检查是否为元素:
node.nodeType === Node.ELEMENT_NODE - 检查是否为文本节点:
node.nodeType === Node.TEXT_NODE - 若已确认是元素节点,再用
node.nodeName.toLowerCase() === 'div'匹配具体标签 - 避免写
node.nodeName === 'DIV' && node.nodeType === 1这类冗余判断——nodeType已足够定位物理类型 - 安全写法:
if (typeof Node !== 'undefined') { ... }或直接用数字 - 不要用
instanceof判断节点类型(如node instanceof Element),跨 iframe 时会失效 - 空格、换行在 HTML 中可能生成文本节点,
nodeType === 3未必代表“有意义的文本”,需进一步判断node.nodeValue.trim()
判断时应严格比对数值,例如:node.nodeType === Node.ELEMENT_NODE(推荐用常量,增强可读性)或 node.nodeType === 1。
nodeName 的行为取决于节点类型,不能反推物理类型
nodeName 返回字符串,但其值和大小写规则随节点类型而异:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
因此,仅凭 nodeName === "DIV" 只能说明它“可能是元素”,但无法排除自定义元素或 SVG 元素等情形;而 nodeName === "#text" 虽然大概率是文本节点,仍需用 nodeType === 3 确认——因为某些环境(如旧版 IE)对 nodeName 的处理不一致。
实际判断建议:优先 nodeType,按需结合 nodeName
日常开发中,典型判断模式如下:
注意兼容性与常见陷阱
现代浏览器均支持标准 Node 常量(如 Node.ELEMENT_NODE),但低版本 IE(≤8)不支持。如需兼容,可用数值或简单 polyfill:
不复杂但容易忽略:物理类型是 DOM 内部结构层面的概念,nodeType 是它最直接的映射。










