<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>类型检测 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E7%B1%BB%E5%9E%8B%E6%A3%80%E6%B5%8B/</link><description>Recent content in 类型检测 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E7%B1%BB%E5%9E%8B%E6%A3%80%E6%B5%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>类型检测方法对比</title><link>https://fe-interview.pangcy.cn/docs/javascript/javascript-02/</link><pubDate>Tue, 04 Mar 2025 06:58:24 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/javascript/javascript-02/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>该问题主要考察以下核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>类型系统理解&lt;/strong>：对JavaScript类型检测机制的系统性认知&lt;/li>
&lt;li>&lt;strong>原型链机制&lt;/strong>：掌握原型继承体系及其实例检测原理&lt;/li>
&lt;li>&lt;strong>跨环境问题&lt;/strong>：理解浏览器多窗口环境下的类型检测隐患&lt;/li>
&lt;li>&lt;strong>ES6规范认知&lt;/strong>：掌握现代API的演进与最佳实践&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点：&lt;/p>
&lt;ul>
&lt;li>typeof运算符的底层实现机制及限制&lt;/li>
&lt;li>instanceof运算符的原型链查找原理&lt;/li>
&lt;li>跨执行环境（iframe）的类型检测问题&lt;/li>
&lt;li>Object.prototype.toString的可靠检测原理&lt;/li>
&lt;li>ES6新增API的设计意图与兼容性处理&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>Object类型检测 &amp;gt; 原型链机制 &amp;gt; 跨执行环境问题 &amp;gt; ES6标准化API&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>typeof实现&lt;/strong>：通过二进制位标识判定类型，对基本类型准确但对引用类型统一返回&amp;quot;object&amp;quot;&lt;/li>
&lt;li>&lt;strong>instanceof机制&lt;/strong>：递归检查&lt;code>__proto__&lt;/code>链是否包含指定构造函数的prototype属性&lt;/li>
&lt;li>&lt;strong>跨环境问题&lt;/strong>：不同window环境拥有独立的全局对象，导致构造函数引用不同&lt;/li>
&lt;li>&lt;strong>Array.isArray原理&lt;/strong>：通过&lt;code>Object.prototype.toString.call(value)&lt;/code>返回内部属性[[Class]]进行精确判断&lt;/li>
&lt;/ol>
&lt;p>常见误区：&lt;/p>
&lt;ul>
&lt;li>误用typeof检测数组（返回object无意义）&lt;/li>
&lt;li>依赖constructor判断类型（易被修改不可靠）&lt;/li>
&lt;li>假设所有环境共享全局构造函数（iframe场景失效）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>typeof通过二进制位检测变量类型，对基本类型有效但无法区分引用类型的具体类型。instanceof通过原型链查找判断实例关系，但在跨iframe场景因全局构造函数不同而失效。Array.isArray()采用Object.prototype.toString检测内部[[Class]]标识，既避免了原型被修改的风险，又能跨环境准确识别数组，是ES6规范推荐的标准检测方式。&lt;/p>
&lt;hr>
&lt;h2 id="解决方案">解决方案 &lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="类型检测实现">类型检测实现 &lt;a href="#%e7%b1%bb%e5%9e%8b%e6%a3%80%e6%b5%8b%e5%ae%9e%e7%8e%b0" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="823a6e6" class="language-javascript ">
 &lt;code>// 安全类型检测函数
function typeChecker(value) {
 // 基本类型检测
 if (value === null) return &amp;#39;null&amp;#39;
 const primitive = typeof value
 if (primitive !== &amp;#39;object&amp;#39;) return primitive

 // 引用类型检测
 const str = Object.prototype.toString.call(value)
 return str.slice(8, -1).toLowerCase()
}

// 数组检测示例
console.log(typeChecker([])) // &amp;#39;array&amp;#39;&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="优化建议">优化建议 &lt;a href="#%e4%bc%98%e5%8c%96%e5%bb%ba%e8%ae%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>性能&lt;/strong>：直接调用内置API避免重复计算&lt;/li>
&lt;li>&lt;strong>可靠性&lt;/strong>：使用冻结对象防止原型篡改&lt;/li>
&lt;li>&lt;strong>兼容性&lt;/strong>：旧版浏览器可使用polyfill实现相同逻辑&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="如何检测typed-array类型">如何检测Typed Array类型？ &lt;a href="#%e5%a6%82%e4%bd%95%e6%a3%80%e6%b5%8btyped-array%e7%b1%bb%e5%9e%8b" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>使用instanceof结合具体构造函数（如Uint8Array）&lt;/p></description></item><item><title>typeof null的返回值问题</title><link>https://fe-interview.pangcy.cn/docs/javascript/javascript-04/</link><pubDate>Tue, 04 Mar 2025 06:58:24 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/javascript/javascript-04/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ul>
&lt;li>&lt;strong>核心能力维度&lt;/strong>：JavaScript语言机制理解、历史背景认知、类型系统掌握&lt;/li>
&lt;li>&lt;strong>技术评估点&lt;/strong>：&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>类型标签机制（Type Tag）的底层实现&lt;/li>
&lt;li>语言设计历史遗留问题&lt;/li>
&lt;li>ECMAScript规范的演进与兼容性约束&lt;/li>
&lt;li>基本类型与对象类型的区分边界&lt;/li>
&lt;li>类型判断操作符的特殊处理逻辑&lt;/li>
&lt;/ol>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>类型标签机制 &amp;gt; 历史兼容性 &amp;gt; 规范定义&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>JavaScript在V8引擎中使用**类型标签（Type Tag）**进行类型判断。变量在内存中被表示为包含类型标签和值的复合结构。对于&lt;code>null&lt;/code>，其机器码使用全零表示（0x000000），而对象类型的类型标签同样以&lt;code>000&lt;/code>开头。在早期设计中，&lt;code>typeof&lt;/code>检测到对象指针时直接返回&lt;code>&amp;quot;object&amp;quot;&lt;/code>，未对&lt;code>null&lt;/code>做单独处理。&lt;/p>
&lt;p>ECMA-262规范第6版明确定义：当操作数为&lt;code>null&lt;/code>时，&lt;code>typeof&lt;/code>必须返回&lt;code>&amp;quot;object&amp;quot;&lt;/code>（条款24.5.3）。这个设计源于1997年JavaScript 1.1版本的历史遗留问题，因涉及大量现存代码的兼容性问题，无法在后继版本中修复。&lt;/p>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>认为&lt;code>null&lt;/code>是对象类型（实际为基本类型）&lt;/li>
&lt;li>混淆&lt;code>undefined&lt;/code>与&lt;code>null&lt;/code>的类型判断&lt;/li>
&lt;li>误以为现代引擎已修正此问题&lt;/li>
&lt;/ol>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>&lt;code>typeof null&lt;/code>返回&lt;code>&amp;quot;object&amp;quot;&lt;/code>源于JavaScript的类型标签机制缺陷。在变量存储中，&lt;code>null&lt;/code>的二进制表示全为0，与空对象指针类型标签冲突。ECMAScript规范为保持兼容性将此行为标准化，尽管&lt;code>null&lt;/code>实际属于基本类型。该现象是早期语言设计妥协的结果，现已成为不可更改的语言特性。&lt;/p>
&lt;h2 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>如何准确判断null？&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>使用&lt;code>=== null&lt;/code>严格相等判断&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>其他类型标签机制应用？&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>如数组通过&lt;code>[[class]]&lt;/code>内部属性判断类型&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>BigInt的typeof返回值？&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>返回&lt;code>&amp;quot;bigint&amp;quot;&lt;/code>（ES2020新增类型）&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol></description></item><item><title>NaN检测方法差异</title><link>https://fe-interview.pangcy.cn/docs/javascript/javascript-06/</link><pubDate>Tue, 04 Mar 2025 06:58:24 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/javascript/javascript-06/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>&lt;strong>核心能力维度&lt;/strong>：&lt;br>
本题考察候选人对于JavaScript类型判断机制的理解深度，重点评估以下能力：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>类型转换机制&lt;/strong>：掌握基本类型与强制类型转换规则&lt;/li>
&lt;li>&lt;strong>ES6标准演进认知&lt;/strong>：理解语言缺陷修复的历史背景&lt;/li>
&lt;li>&lt;strong>精准判断能力&lt;/strong>：区分语言特性与API设计哲学差异&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>技术评估点&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;code>isNaN&lt;/code>隐式类型转换机制&lt;/li>
&lt;li>&lt;code>Number.isNaN&lt;/code>严格类型检查特性&lt;/li>
&lt;li>ES6对历史API缺陷的改进思路&lt;/li>
&lt;li>NaN值的特殊内存表示原理&lt;/li>
&lt;li>非数值参数的差异性处理逻辑&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>类型转换优先级&lt;/strong>：&lt;code>isNaN&lt;/code> &amp;gt; &lt;code>Number类型检查&lt;/code> &amp;gt; &lt;code>NaN判定&lt;/code>&lt;/li>
&lt;li>&lt;strong>IEEE754标准&lt;/strong>：NaN是唯一不等于自身的值&lt;/li>
&lt;li>&lt;strong>ES6设计哲学&lt;/strong>：修复历史API的模糊判断&lt;/li>
&lt;/ol>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>传统的&lt;code>isNaN()&lt;/code>方法执行时：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="bb801e4" class="language-javascript ">
 &lt;code>function isNaN(value) {
 const n = Number(value);
 return n !== n; // NaN是唯一不等于自身的值
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>而&lt;code>Number.isNaN()&lt;/code>直接进行类型检查：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="a371648" class="language-javascript ">
 &lt;code>Number.isNaN = function(value) {
 return typeof value === &amp;#39;number&amp;#39; &amp;amp;&amp;amp; isNaN(value);
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>误认为&lt;code>isNaN&lt;/code>能直接判断NaN值&lt;/li>
&lt;li>混淆&lt;code>NaN&lt;/code>与&lt;code>&amp;quot;NaN&amp;quot;&lt;/code>字符串的判断&lt;/li>
&lt;li>忽略&lt;code>null&lt;/code>、&lt;code>undefined&lt;/code>等特殊值的转换逻辑&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>&lt;strong>核心差异&lt;/strong>：&lt;br>
&lt;code>isNaN()&lt;/code>会对参数进行隐式类型转换后判断是否为NaN，而&lt;code>Number.isNaN()&lt;/code>仅在参数为Number类型且值为NaN时返回true。&lt;/p>
&lt;p>&lt;strong>示例说明&lt;/strong>：&lt;/p></description></item><item><title>原型链类型检测</title><link>https://fe-interview.pangcy.cn/docs/javascript/javascript-15/</link><pubDate>Tue, 04 Mar 2025 06:58:24 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/javascript/javascript-15/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>本题主要考察以下核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>原型链机制理解&lt;/strong>：能否清晰描述&lt;code>instanceof&lt;/code>操作符基于原型链进行类型检测的实现原理&lt;/li>
&lt;li>&lt;strong>跨执行环境问题诊断&lt;/strong>：是否了解浏览器多窗口环境对原型链检测的影响&lt;/li>
&lt;li>&lt;strong>替代方案掌握&lt;/strong>：能否给出可靠的类型检测方案及其原理依据&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点包括：&lt;/p>
&lt;ul>
&lt;li>&lt;code>instanceof&lt;/code>的递归原型查找机制&lt;/li>
&lt;li>浏览器多窗口（iframe）环境中的构造函数隔离问题&lt;/li>
&lt;li>&lt;code>Object.prototype.toString&lt;/code>的跨环境兼容性原理&lt;/li>
&lt;li>内置静态方法（如&lt;code>Array.isArray&lt;/code>）的检测策略差异&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>原型链查找机制&lt;/li>
&lt;li>执行环境隔离&lt;/li>
&lt;li>类型检测替代方案&lt;/li>
&lt;/ol>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>&lt;strong>&lt;code>instanceof&lt;/code>工作原理&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>检查右侧构造函数是否存在&lt;code>Symbol.hasInstance&lt;/code>方法，若有则调用该方法&lt;/li>
&lt;li>若无，则遍历左侧对象的原型链（通过&lt;code>__proto__&lt;/code>），
直到找到与构造函数的&lt;code>prototype&lt;/code>相等的原型对象&lt;/li>
&lt;li>若直到原型链末端（&lt;code>null&lt;/code>）仍未找到，返回&lt;code>false&lt;/code>&lt;/li>
&lt;/ol>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="0232819" class="language-javascript ">
 &lt;code>function customInstanceof(obj, constructor) {
 let proto = Object.getPrototypeOf(obj);
 while (proto) {
 if (proto === constructor.prototype) return true;
 proto = Object.getPrototypeOf(proto);
 }
 return false;
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>跨窗口问题&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>不同窗口的全局构造函数独立（如&lt;code>iframeContentWindow.Array !== parentWindow.Array&lt;/code>）&lt;/li>
&lt;li>导致跨窗口对象无法通过&lt;code>instanceof&lt;/code>检测父窗口构造函数&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>可靠检测方案&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>&lt;code>Object.prototype.toString.call(obj)&lt;/code>：依赖对象内部&lt;code>[[Class]]&lt;/code>标记&lt;/li>
&lt;li>&lt;code>Array.isArray()&lt;/code>：通过&lt;code>@@species&lt;/code>标识检测&lt;/li>
&lt;li>&lt;code>obj?.constructor === Type&lt;/code>：需确保构造函数来源一致性&lt;/li>
&lt;/ol>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ul>
&lt;li>认为修改&lt;code>constructor.prototype&lt;/code>会影响已创建实例的&lt;code>instanceof&lt;/code>结果&lt;/li>
&lt;li>误将跨窗口对象的&lt;code>constructor&lt;/code>与当前环境构造函数直接比较&lt;/li>
&lt;li>忽略&lt;code>Symbol.hasInstance&lt;/code>自定义检测逻辑的影响&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>&lt;code>instanceof&lt;/code>通过递归查找对象原型链，判断是否存在与构造函数&lt;code>prototype&lt;/code>相等的原型。在跨窗口环境中，由于不同窗口的全局构造函数相互独立，导致检测失效。可靠解决方案包括：&lt;/p></description></item></channel></rss>