<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>LeylaTop Blog</title>
        <link>https://leyla.top/blog</link>
        <description>LeylaTop Blog</description>
        <lastBuildDate>Mon, 17 Nov 2025 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <item>
            <title><![CDATA[npx 是什么?]]></title>
            <link>https://leyla.top/blog/what-is-npx</link>
            <guid>https://leyla.top/blog/what-is-npx</guid>
            <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[npx 是什么]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="npx-是什么">npx 是什么<a href="https://leyla.top/blog/what-is-npx#npx-%E6%98%AF%E4%BB%80%E4%B9%88" class="hash-link" aria-label="npx 是什么的直接链接" title="npx 是什么的直接链接">​</a></h2>
<p><code>npx</code> 是现代 JavaScript 工具链中一个极其方便且重要的命令。简单来说，它的全称是 <strong>N</strong>ode <strong>P</strong>ackage e<strong>X</strong>ecute（Node 包执行器），它让你<strong>无需在本地或全局安装一个 npm 包，就能直接运行它提供的命令。</strong></p>
<p>可以把它想象成一个“一次性”的命令运行器。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="npx-的核心作用解决什么问题"><code>npx</code> 的核心作用：解决什么问题？<a href="https://leyla.top/blog/what-is-npx#npx-%E7%9A%84%E6%A0%B8%E5%BF%83%E4%BD%9C%E7%94%A8%E8%A7%A3%E5%86%B3%E4%BB%80%E4%B9%88%E9%97%AE%E9%A2%98" class="hash-link" aria-label="npx-的核心作用解决什么问题的直接链接" title="npx-的核心作用解决什么问题的直接链接">​</a></h3>
<p>在没有 <code>npx</code> 的时代，如果你想使用一个命令行工具（比如 <code>create-react-app</code> 来创建 React 项目），你有两种选择，但它们都有缺点：</p>
<ol>
<li>
<p><strong>全局安装 (<code>npm install -g create-react-app</code>)</strong></p>
<ul>
<li><strong>缺点1: 全局污染</strong>。你的电脑上会安装很多可能只用一次的工具，时间久了会变得混乱。</li>
<li><strong>缺点2: 版本管理困难</strong>。一旦全局安装，所有项目都共用这个版本。如果你想在新项目中使用最新版的 <code>create-react-app</code>，就必须先更新全局包，这可能会影响到依赖旧版本的旧项目。</li>
</ul>
</li>
<li>
<p><strong>本地安装 (<code>npm install create-react-app</code>)</strong></p>
<ul>
<li><strong>缺点</strong>: 这会将包安装到当前项目的 <code>node_modules</code> 目录下，增加了项目体积。而且，要运行它，你必须使用很长的路径：<code>./node_modules/.bin/create-react-app</code>，非常不方便。</li>
</ul>
</li>
</ol>
<p><strong><code>npx</code> 的出现完美地解决了以上所有问题。</strong></p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="npx-是如何工作的"><code>npx</code> 是如何工作的？<a href="https://leyla.top/blog/what-is-npx#npx-%E6%98%AF%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%E7%9A%84" class="hash-link" aria-label="npx-是如何工作的的直接链接" title="npx-是如何工作的的直接链接">​</a></h3>
<p>当你执行 <code>npx &lt;command&gt;</code> 时，它会按照以下顺序智能地寻找并执行命令：</p>
<ol>
<li>
<p><strong>检查本地项目</strong>：首先，检查当前项目目录的 <code>node_modules/.bin</code> 路径下是否存在 <code>&lt;command&gt;</code>。如果存在，就直接执行它。</p>
<ul>
<li><em>这使得 <code>npx prettier --write .</code> 可以直接使用项目依赖里安装的 Prettier 版本，非常方便。</em></li>
</ul>
</li>
<li>
<p><strong>检查远程仓库</strong>：如果在本地项目中找不到，<code>npx</code> 会去 npm 远程仓库查找是否存在名为 <code>&lt;command&gt;</code> 的包。</p>
</li>
<li>
<p><strong>下载并执行</strong>：如果找到了，<code>npx</code> 会将这个包<strong>临时下载到一个中央缓存区</strong>，执行完毕后，并不会在你的全局或本地项目中留下“痕迹”。</p>
</li>
</ol>
<p><strong>关键点</strong>：<code>npx</code> 自带于 npm 5.2.0 及以上版本，所以只要你的 Node.js 和 npm 版本不是太旧，你就可以直接使用它，无需额外安装。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="三个最常见的-npx-使用场景">三个最常见的 <code>npx</code> 使用场景<a href="https://leyla.top/blog/what-is-npx#%E4%B8%89%E4%B8%AA%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84-npx-%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF" class="hash-link" aria-label="三个最常见的-npx-使用场景的直接链接" title="三个最常见的-npx-使用场景的直接链接">​</a></h3>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="1-项目脚手架最经典">1. 项目脚手架（最经典）<a href="https://leyla.top/blog/what-is-npx#1-%E9%A1%B9%E7%9B%AE%E8%84%9A%E6%89%8B%E6%9E%B6%E6%9C%80%E7%BB%8F%E5%85%B8" class="hash-link" aria-label="1. 项目脚手架（最经典）的直接链接" title="1. 项目脚手架（最经典）的直接链接">​</a></h4>
<p>这是 <code>npx</code> 最广为人知的用途。你只需运行一次命令来创建项目，之后就不再需要它了。</p>
<div class="language-bash codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-bash codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># 创建一个新的 React 项目</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx create-react-app my-react-app</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 创建一个新的 Vue 项目</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx create-vue@latest my-vue-app</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 创建一个新的 Vite 项目</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx create-vite my-vite-project</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>在这些场景下，<code>npx</code> 会自动下载并使用最新版的脚手架工具，帮你生成项目，然后“挥一挥衣袖，不带走一片云彩”。</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="2-运行项目本地依赖的工具">2. 运行项目本地依赖的工具<a href="https://leyla.top/blog/what-is-npx#2-%E8%BF%90%E8%A1%8C%E9%A1%B9%E7%9B%AE%E6%9C%AC%E5%9C%B0%E4%BE%9D%E8%B5%96%E7%9A%84%E5%B7%A5%E5%85%B7" class="hash-link" aria-label="2. 运行项目本地依赖的工具的直接链接" title="2. 运行项目本地依赖的工具的直接链接">​</a></h4>
<p>假设你的项目开发依赖（<code>devDependencies</code>）中安装了 <code>prettier</code> 或 <code>tailwindcss</code>。</p>
<div class="language-json codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)">// package.json</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">"devDependencies"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"prettier"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"^3.0.0"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"tailwindcss"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"^3.3.3"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>你可以直接用 <code>npx</code> 来调用它们，而无需在 <code>package.json</code> 的 <code>scripts</code> 中配置命令，也无需写长长的路径。</p>
<div class="language-bash codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-bash codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># 使用项目本地安装的 prettier 格式化所有文件</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx prettier </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--write</span><span class="token plain"> </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 使用项目本地安装的 tailwindcss 来编译你的 CSS</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx tailwindcss </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-i</span><span class="token plain"> ./src/input.css </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-o</span><span class="token plain"> ./dist/output.css </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--watch</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><code>npx</code> 的这个特性保证了所有团队成员都使用 <code>package.json</code> 中锁定的、统一版本的工具。</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="3-尝试和运行不常用的包">3. 尝试和运行不常用的包<a href="https://leyla.top/blog/what-is-npx#3-%E5%B0%9D%E8%AF%95%E5%92%8C%E8%BF%90%E8%A1%8C%E4%B8%8D%E5%B8%B8%E7%94%A8%E7%9A%84%E5%8C%85" class="hash-link" aria-label="3. 尝试和运行不常用的包的直接链接" title="3. 尝试和运行不常用的包的直接链接">​</a></h4>
<p>想看看 <code>cowsay</code> 这个包的效果？或者临时启动一个 HTTP 服务器？</p>
<div class="language-bash codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-bash codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)"># 让一头牛说“你好”</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx cowsay </span><span class="token string" style="color:hsl(119, 34%, 47%)">"你好，世界！"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)"># 在当前目录下快速启动一个本地 HTTP 服务器</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx http-server</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>你不需要为了这个小小的乐趣或临时需求而去 <code>npm install</code> 任何东西。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="总结npx-vs-npm">总结：<code>npx</code> vs <code>npm</code><a href="https://leyla.top/blog/what-is-npx#%E6%80%BB%E7%BB%93npx-vs-npm" class="hash-link" aria-label="总结npx-vs-npm的直接链接" title="总结npx-vs-npm的直接链接">​</a></h3>
<p>可以做一个简单的类比：</p>
<ul>
<li><strong><code>npm install</code></strong>：像是去商店<strong>购买</strong>一个工具，把它放进你自己的工具箱（<code>node_modules</code>）或家里的公共储藏室（全局安装）。这个工具会一直留在那里。</li>
<li><strong><code>npx</code></strong>：像是去工具租赁公司<strong>租用</strong>一个工具。你告诉 <code>npx</code> 你要用什么，它帮你拿来，用完后它就负责还回去。你家里干干净净，什么也没留下。</li>
</ul>
<p>因此，<code>npx</code> 是一个强大的、用于提升开发体验和保持环境整洁的利器。</p>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>软件</category>
            <category>develop</category>
            <category>系统</category>
        </item>
        <item>
            <title><![CDATA[前端仓库配置 ESLint 流程]]></title>
            <link>https://leyla.top/blog/note/eslint-flow</link>
            <guid>https://leyla.top/blog/note/eslint-flow</guid>
            <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[eslint-flow 仓库]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="eslint-flow-仓库">eslint-flow 仓库<a href="https://leyla.top/blog/note/eslint-flow#eslint-flow-%E4%BB%93%E5%BA%93" class="hash-link" aria-label="eslint-flow 仓库的直接链接" title="eslint-flow 仓库的直接链接">​</a></h2>
<p><span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/leylatop/eslint-flow" target="_blank" rel="noopener noreferrer" class="link">leylatop/eslint-flow</a></span></p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="设计配置与技术实现">设计配置与技术实现<a href="https://leyla.top/blog/note/eslint-flow#%E8%AE%BE%E8%AE%A1%E9%85%8D%E7%BD%AE%E4%B8%8E%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0" class="hash-link" aria-label="设计配置与技术实现的直接链接" title="设计配置与技术实现的直接链接">​</a></h2>
<p>以下操作基于代码仓库实现。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="安装-eslint">安装 ESLint<a href="https://leyla.top/blog/note/eslint-flow#%E5%AE%89%E8%A3%85-eslint" class="hash-link" aria-label="安装 ESLint的直接链接" title="安装 ESLint的直接链接">​</a></h3>
<p>ESLint 负责<strong>代码质量检查</strong>和发现潜在错误。</p>
<p>使用官方的初始化命令，在项目根目录下运行：</p>
<div class="language-bash codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-bash codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">npm</span><span class="token plain"> init @eslint/config@latest</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="��复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>在安装过程中，ESLint 会通过一系列的问题，帮助用户生成基础配置。</p>
<p>完成和 ESLint 的问题后，会自动安装 ESLint 所需的 npm 包（如 <code>eslint</code>、<code>eslint-plugin-react</code> 等），并自动生成一个 <code>eslint.config.js</code>（老的版本叫 <code>.eslintrc.js</code>）。</p>
<p>根据项目需求，修改 <code>eslint.config.js</code> 的 rule 使 lint 发生变化。</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="常见-rule">常见 rule<a href="https://leyla.top/blog/note/eslint-flow#%E5%B8%B8%E8%A7%81-rule" class="hash-link" aria-label="常见 rule的直接链接" title="常见 rule的直接链接">​</a></h4>
<div class="language-javascript codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">rules</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'quotes'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'single'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 使用单引号</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'semi'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 禁用分号结尾</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'comma-spacing'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">before</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">after</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 逗号后面添加空格，前面不加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'arrow-spacing'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">before</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">after</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 箭头函数前面添加空格，后面添加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'camelcase'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">properties</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">ignoreDestructuring</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 强制使用驼峰命名</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'eqeqeq'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'always'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token keyword null nil" style="color:hsl(301, 63%, 40%)">null</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'ignore'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 强制使用全等运算符</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'comma-dangle'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">arrays</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">objects</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">imports</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">exports</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">functions</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'never'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 禁止在数组、对象、导入、导出、函数后面添加逗号</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'indent'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 强制使用 2 个空格缩进</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">SwitchCase</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// switch 语句后面添加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">VariableDeclarator</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 变量声明后面添加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">outerIIFEBody</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 外层 IIFE 体后面添加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">MemberExpression</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 成员表达式后面添加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">FunctionDeclaration</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">parameters</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">body</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 函数声明后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">FunctionExpression</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">parameters</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">body</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 函数表达式后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">CallExpression</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">arguments</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 调用表达式后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">ArrayExpression</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 数组表达式后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">ObjectExpression</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 对象表达式后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">ImportDeclaration</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 导入声明后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">flatTernaryExpressions</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 扁平三元表达式后面添加 1 个空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">ignoreComments</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 忽略注释</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'key-spacing'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">beforeColon</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">afterColon</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 强制使用冒号后面添加空格，前面不加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token string-property property" style="color:hsl(5, 74%, 59%)">'keyword-spacing'</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token string" style="color:hsl(119, 34%, 47%)">'error'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">before</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">after</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 强制使用关键字后面添加空格，前面不加空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="集成到开发流程">集成到开发流程<a href="https://leyla.top/blog/note/eslint-flow#%E9%9B%86%E6%88%90%E5%88%B0%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B" class="hash-link" aria-label="集成到开发流程的直接链接" title="集成到开发流程的直接链接">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="在编辑器中安装-eslint-插件">在编辑器中安装 ESLint 插件<a href="https://leyla.top/blog/note/eslint-flow#%E5%9C%A8%E7%BC%96%E8%BE%91%E5%99%A8%E4%B8%AD%E5%AE%89%E8%A3%85-eslint-%E6%8F%92%E4%BB%B6" class="hash-link" aria-label="在编辑器中安装 ESLint 插件的直接链接" title="在编辑器中安装 ESLint 插件的直接链接">​</a></h3>
<p>在 VS Code 的扩展商店中搜索并安装 <code>ESLint</code> 插件，这样在编码过程中，有触发 lint 限制，编辑器会报红提醒。</p>
<p>如需<strong>每次保存文件时，使用 ESLint 进行自动修复</strong>，可以在 VSCode 中配置 settings.json：</p>
<div class="language-json codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// .vscode/settings.json</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"editor.formatOnSave"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">true</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"editor.codeActionsOnSave"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"source.fixAll"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"explicit"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"source.fixAll.eslint"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"explicit"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="在-packagejson-增加-lint-检测">在 package.json 增加 lint 检测<a href="https://leyla.top/blog/note/eslint-flow#%E5%9C%A8-packagejson-%E5%A2%9E%E5%8A%A0-lint-%E6%A3%80%E6%B5%8B" class="hash-link" aria-label="在 package.json 增加 lint 检测的直接链接" title="在 package.json 增加 lint 检测的直接链接">​</a></h3>
<p>在 <code>package.json</code> 的 <code>scripts</code> 中添加命令，方便手动检查整个项目。</p>
<p>（也可以在 CI/CD 打包过程中加入 <code>npm run lint</code> 的检测）</p>
<div class="language-json codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"scripts"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ... 其他脚本</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"lint"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"eslint . --ext .js,.jsx,.ts,.tsx"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="在-git-提交过程中增加-lint-检测">在 git 提交过程中增加 lint 检测<a href="https://leyla.top/blog/note/eslint-flow#%E5%9C%A8-git-%E6%8F%90%E4%BA%A4%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%A2%9E%E5%8A%A0-lint-%E6%A3%80%E6%B5%8B" class="hash-link" aria-label="在 git 提交过程中增加 lint 检测的直接链接" title="在 git 提交过程中增加 lint 检测的直接链接">​</a></h3>
<p>为了从源头杜绝不规范的代码被提交到仓库，可以使用 <code>husky</code> 和 <code>lint-staged</code> 在提交代码前自动进行检查。</p>
<p>安装 <code>husky</code> 和 <code>lint-staged</code> 依赖：</p>
<div class="language-bash codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-bash codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> --save-dev husky lint-staged</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>配置 <code>husky</code> 和 <code>lint-staged</code>：</strong></p>
<ol>
<li>运行 <code>npx husky init</code> 来初始化 husky，此步骤自动生成 <code>.husky/pre-commit</code> 文件，并且在 <code>package.json</code> 的 <code>scripts</code> 中新增 <code>"prepare": "husky"</code></li>
<li>在 <code>package.json</code> 中添加 <code>lint-staged</code> 配置：</li>
</ol>
<div class="language-json codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)">// package.json</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ... 其他配置</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"lint-staged"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token property" style="color:hsl(5, 74%, 59%)">"*.{js,jsx,ts,tsx}"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token string" style="color:hsl(119, 34%, 47%)">"eslint"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="3">
<li>编辑生成的 <code>.husky/pre-commit</code> 文件，确保其内容为：</li>
</ol>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token shebang important" style="color:hsl(230, 8%, 24%);font-weight:bold">#!/bin/sh</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">npx lint-staged</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>现在，每当尝试 <code>git commit</code> 时，<code>lint-staged</code> 会自动对您本次修改并暂存（staged）的文件运行 <code>eslint</code>。如果有错误，提交将会被阻止。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="常见问题">常见问题<a href="https://leyla.top/blog/note/eslint-flow#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" class="hash-link" aria-label="常见问题的直接链接" title="常见问题的直接链接">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="编辑器未按照-eslint-规则进行检测和报错">编辑器未按照 ESLint 规则进行检测和报错<a href="https://leyla.top/blog/note/eslint-flow#%E7%BC%96%E8%BE%91%E5%99%A8%E6%9C%AA%E6%8C%89%E7%85%A7-eslint-%E8%A7%84%E5%88%99%E8%BF%9B%E8%A1%8C%E6%A3%80%E6%B5%8B%E5%92%8C%E6%8A%A5%E9%94%99" class="hash-link" aria-label="编辑器未按照 ESLint 规则进行检测和报错的直接链接" title="编辑器未按照 ESLint 规则进行检测和报错的直接链接">​</a></h3>
<p><strong>问题描述：</strong></p>
<p>已经在仓库中安装 ESLint 相关依赖，并在仓库根目录下存在 <code>eslint.config.js</code> 或 <code>.eslintrc.js</code> 配置文件。在编辑器修改代码后，编辑器未按照 ESLint 规则进行检测和报错。</p>
<p><strong>解决方案：</strong></p>
<ol>
<li>检查编辑器是否安装 VSCode 插件，如果未安装，则自行安装</li>
<li>检查根目录下是 <code>eslint.config.js</code> 还是 <code>.eslintrc.js</code>
<ul>
<li>如果是 <code>.eslintrc.js</code>，则需要在根目录下创建 <code>.vscode/settings.json</code> 文件，告诉编辑器要使用 <code>.eslintrc.js</code></li>
<li>如果不配置 settings.json，就需要将 <code>.eslintrc.js</code> 升级成 <code>eslint.config.js</code></li>
</ul>
</li>
</ol>
<div class="language-json codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-json codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token property" style="color:hsl(5, 74%, 59%)">"eslint.useFlatConfig"</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 使用 ESLint 的'传统'配置系统（.eslintrc.js），而不是'扁平化'的新配置系统（eslint.config.js）</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>前端</category>
            <category>ESLint</category>
            <category>流程</category>
        </item>
        <item>
            <title><![CDATA[css 层叠上下文导致的 hover 抓不到子元素的 bug]]></title>
            <link>https://leyla.top/blog/css-layer-context-bug</link>
            <guid>https://leyla.top/blog/css-layer-context-bug</guid>
            <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[parent 的 opacity < 1，使 parent 形成了上下文，child-container 的 z-index 相对于的是parent上下文，不参与全局的上下文。会被后面的文档流覆盖掉。所以会出现 hover 抓不到子元素的现象。]]></description>
            <content:encoded><![CDATA[<p>parent 的 opacity &lt; 1，使 parent 形成了上下文，child-container 的 z-index 相对于的是parent上下文，不参与全局的上下文。会被后面的文档流覆盖掉。所以会出现 hover 抓不到子元素的现象。</p>
<p>代码如下：</p>
<div class="language-html codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-html codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token doctype punctuation" style="color:hsl(119, 34%, 47%)">&lt;!</span><span class="token doctype doctype-tag" style="color:hsl(230, 8%, 24%)">DOCTYPE</span><span class="token doctype" style="color:hsl(230, 8%, 24%)"> </span><span class="token doctype name" style="color:hsl(230, 8%, 24%)">html</span><span class="token doctype punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">html</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">en</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">head</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">meta</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">charset</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">UTF-8</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">meta</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">viewport</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">content</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">width=device-width, initial-scale=1.0</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">title</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">Document</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">title</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">head</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">body</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">container</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">ol</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">li</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">hover toggle child, 展示 child-container</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">li</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">li</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">hover child-container, 会出现“抓不到”的现象</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">li</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">ol</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">grand-parent</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">parent</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        toggle child</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">child-container</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">child</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">1</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">child</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">2</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">child</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">3</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag" style="color:hsl(5, 74%, 59%)"> </span><span class="token tag attr-name" style="color:hsl(35, 99%, 36%)">class</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(119, 34%, 47%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag attr-value" style="color:hsl(119, 34%, 47%)">sibling</span><span class="token tag attr-value punctuation" style="color:hsl(119, 34%, 47%)">"</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">1</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">2</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">3</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">4</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain">5</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">p</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">div</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;</span><span class="token tag" style="color:hsl(5, 74%, 59%)">style</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.grand-parent</span><span class="token style language-css"> </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">position</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> relative</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css comment" style="color:hsl(230, 4%, 64%)">/* parent 的 opacity &lt; 1, 使 parent 形成了上下文 */</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.parent</span><span class="token style language-css"> </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">position</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> relative</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">opacity</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css number" style="color:hsl(35, 99%, 36%)">0.8</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"> </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">cursor</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> not-allowed</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.child-container</span><span class="token style language-css"> </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">display</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> none</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">position</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> absolute</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">top</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css number" style="color:hsl(35, 99%, 36%)">100</span><span class="token style language-css unit">%</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">left</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css number" style="color:hsl(35, 99%, 36%)">0</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">width</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css number" style="color:hsl(35, 99%, 36%)">100</span><span class="token style language-css unit">%</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">background-color</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css color">aqua</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">z-index</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> </span><span class="token style language-css number" style="color:hsl(35, 99%, 36%)">100</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css">  </span><span class="token style language-css comment" style="color:hsl(230, 4%, 64%)">/* z-index 相对于的是parent上下文 */</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.parent</span><span class="token style language-css selector pseudo-class" style="color:hsl(119, 34%, 47%)">:hover</span><span class="token style language-css selector" style="color:hsl(119, 34%, 47%)"> </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.child-container</span><span class="token style language-css"> </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">display</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> block</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css comment" style="color:hsl(230, 4%, 64%)">/* 普通定位元素，位于 grand-parent 之后，所以会覆盖掉 grand-parent 内的元素 */</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css selector class" style="color:hsl(119, 34%, 47%)">.sibling</span><span class="token style language-css"> </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">      </span><span class="token style language-css property" style="color:hsl(5, 74%, 59%)">position</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token style language-css"> relative</span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">    </span><span class="token style language-css punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token style language-css"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token style language-css">  </span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">style</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">body</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&lt;/</span><span class="token tag" style="color:hsl(5, 74%, 59%)">html</span><span class="token tag punctuation" style="color:hsl(119, 34%, 47%)">&gt;</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="解决方法">解决方法<a href="https://leyla.top/blog/css-layer-context-bug#%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95" class="hash-link" aria-label="解决方法的直接链接" title="解决方法的直接链接">​</a></h2>
<p>将 opacity 分别给 parent 的子元素，即 child-container 及child-container 的兄弟元素。</p>
<p>原因是：在 parent 设置 <code>opacity &lt; 1</code>, 使 parent 形成了上下文，此时 .child-container 的 z-index 相对于的是parent上下文，不参与全局的上下文。会被后面的文档流覆盖掉。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="层叠上下文绘制顺序">层叠上下文绘制顺序<a href="https://leyla.top/blog/css-layer-context-bug#%E5%B1%82%E5%8F%A0%E4%B8%8A%E4%B8%8B%E6%96%87%E7%BB%98%E5%88%B6%E9%A1%BA%E5%BA%8F" class="hash-link" aria-label="层叠上下文绘制顺序的直接链接" title="层叠上下文绘制顺序的直接链接">​</a></h2>
<ul>
<li>层叠上下文的背景和边框</li>
<li>负z-index的子层叠上下文</li>
<li>块级盒子（block-level boxes） ← 普通元素在这里！</li>
<li>浮动元素（floated elements）</li>
<li>内联元素（inline elements）</li>
<li>z-index: 0的子层叠上下文 / 定位元素（z-index: auto）</li>
<li>正z-index的子层叠上下文</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="其他变形">其他变形<a href="https://leyla.top/blog/css-layer-context-bug#%E5%85%B6%E4%BB%96%E5%8F%98%E5%BD%A2" class="hash-link" aria-label="其他变形的直接链接" title="其他变形的直接链接">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="使元素变为层叠上下文的-css-属性">使元素变为层叠上下文的 css 属性<a href="https://leyla.top/blog/css-layer-context-bug#%EF%BF%BD%EF%BF%BD%E4%BD%BF%E5%85%83%E7%B4%A0%E5%8F%98%E4%B8%BA%E5%B1%82%E5%8F%A0%E4%B8%8A%E4%B8%8B%E6%96%87%E7%9A%84-css-%E5%B1%9E%E6%80%A7" class="hash-link" aria-label="使元素变为层叠上下文的 css 属性的直接链接" title="使元素变为层叠上下文的 css 属性的直接链接">​</a></h3>
<ol>
<li>display 为 flex（flex ｜ inline-flex），同时 z-index 不是 auto；</li>
<li>opacity &lt; 1；</li>
<li>transform 不为 none；</li>
<li>filter 不为 none；</li>
<li>mix-blend-mode 不是 normal；</li>
<li>isolation 是 isolate;</li>
<li>will-change 属性为上面 2~6 的任意一个（will-change： transform、will-change：opacity）</li>
<li>-webkit-overflow-scrolling 为 touch</li>
</ol>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="使-grand-parent-形成层叠上下文">使 grand-parent 形成层叠上下文<a href="https://leyla.top/blog/css-layer-context-bug#%E4%BD%BF-grand-parent-%E5%BD%A2%E6%88%90%E5%B1%82%E5%8F%A0%E4%B8%8A%E4%B8%8B%E6%96%87" class="hash-link" aria-label="使 grand-parent 形成层叠上下文的直接链接" title="使 grand-parent 形成层叠上下文的直接链接">​</a></h3>
<p>在 grand-parent 形成了层叠上下文；sibling 的 z-index 为 auto，不形成层叠上下文；</p>
<ol>
<li>
<p>grand-parent 的 <strong>z-index 为 0</strong>;</p>
<ul>
<li>hover child-container <strong>会</strong>出现“抓不到”的现象</li>
<li>grand-parent 的 z-index 为 0；sibling 的 z-index auto 在层级比较中，相当于 0；所以 grand-parent 会被后来的 sibling 覆盖；</li>
</ul>
</li>
<li>
<p>grand-parent 的 <strong>z-index 为 1</strong>;</p>
<ul>
<li>hover child-container <strong>不会</strong>出现“抓不到”的现象</li>
<li>grand-parent 的 z-index 为 1，比 sibling 的 z-index auto 层级高，所以 grand-parent 会覆盖 sibling；</li>
</ul>
</li>
<li>
<p>grand-parent 的 <strong>transform</strong> 为 translateX(0);</p>
<ul>
<li>hover child-container <strong>会</strong>出现“抓不到”的现象；</li>
<li>grand-parent 被文档流中的 sibling 覆盖；</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="使grand-parent-不形成层叠上下文">使grand-parent 不形成层叠上下文<a href="https://leyla.top/blog/css-layer-context-bug#%E4%BD%BFgrand-parent-%E4%B8%8D%E5%BD%A2%E6%88%90%E5%B1%82%E5%8F%A0%E4%B8%8A%E4%B8%8B%E6%96%87" class="hash-link" aria-label="使grand-parent 不形成层叠上下文的直接链接" title="使grand-parent 不形成层叠上下文的直接链接">​</a></h3>
<p>在 grand-parent 不形成层叠上下文；设置 <strong>sibling 的 z-index 为 0</strong>；</p>
<ul>
<li>hover child-container <strong>不会</strong>出现“抓不到”的现象；</li>
<li>child-container 此时的 z-index 相对于根元素；与 sibling 一起 pk，child-container 会覆盖 sibling；</li>
</ul>
<p>在 grand-parent 不形成层叠上下文；设置 <strong>sibling 的 z-index 为 101</strong>；</p>
<ul>
<li>hover child-container <strong>会</strong>出现“抓不到”的现象；</li>
<li>child-container 此时的 z-index 相对于根元素；与 sibling 一起 pk，sibling 会覆盖 child-container；</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="总结">总结<a href="https://leyla.top/blog/css-layer-context-bug#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="总结的直接链接" title="总结的直接链接">​</a></h2>
<ol>
<li>
<p>当父级元素中，若哪一层级形成了层叠上下文，元素的 z-index 就会相对于该层叠上下文；否则是相对于根层叠上下文。</p>
</li>
<li>
<p>z-index 会在同一级的上下文中，与其他有 z-index 的元素去 pk，z-index 值较大的元素会覆盖z-index 值较小的元素。</p>
</li>
<li>
<p>若 z-index 相对于非根层叠上下文；且该层叠上下文被后续文档流，或被后续层级更高的层叠上下文覆盖，则该元素会被覆盖。</p>
</li>
</ol>]]></content:encoded>
            <category>css</category>
            <category>层叠上下文</category>
        </item>
        <item>
            <title><![CDATA[理解css 1234值表示法]]></title>
            <link>https://leyla.top/blog/understand-css-1234-value-representation</link>
            <guid>https://leyla.top/blog/understand-css-1234-value-representation</guid>
            <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[css 属性的四个值的属性从左上角开始，顺时针设置：]]></description>
            <content:encoded><![CDATA[<p>css 属性的四个值的属性从左上角开始，顺时针设置：</p>
<ul>
<li>如果设置三个值，则第二个值为对称值，即省略的第四个值与第二个值一致。</li>
</ul>
<div class="language-css codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-css codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 上右下左</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">padding</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 上下、左右</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">padding</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">20</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 上、左右、下</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">padding</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">20</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">15</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 上、右、下、左</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">padding</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">20</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">15</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 全部</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">50</span><span class="token unit">%</span><span class="token plain">；</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 左上角&amp;右下角、右上角&amp;左下角</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">50</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">%</span><span class="token plain">；</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 左上角、右上角&amp;左下角、右下角</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">25</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">50</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">40</span><span class="token unit">%</span><span class="token plain">；</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 左上角、右上角、右下角、左下角</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">30</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">50</span><span class="token unit">%</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">70</span><span class="token unit">%</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"># 左上角、右上角、右下角、左下角的上下值</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token unit">px</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">/* 等价于： */</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">/* border-top-left-radius: horizontal vertical */</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">/* horizontal:表示椭圆的水平半长轴在被用作边框的半径 */</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">/* vertical: 表示椭圆的垂直半长轴在被用作边框的半径 */</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">/* 两个值可以设置左上角的圆角（圆弧）效果 */</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-top-left-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-top-right-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-bottom-right-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">6</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token property" style="color:hsl(5, 74%, 59%)">border-bottom-left-radius</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token unit">px</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">4</span><span class="token unit">px</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>前端</category>
            <category>css</category>
            <category>1234值表示法</category>
        </item>
        <item>
            <title><![CDATA[你不知道的 js 拆箱操作]]></title>
            <link>https://leyla.top/blog/you-dont-know-js-unboxing-detail</link>
            <guid>https://leyla.top/blog/you-dont-know-js-unboxing-detail</guid>
            <pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[解释：]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="解释">解释：<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E8%A7%A3%E9%87%8A" class="hash-link" aria-label="解释：的直接链接" title="解释：的直接链接">​</a></h2>
<p>拆箱操作，即对象转换为基本类型。可以将对象转换为字符串、数字或布尔值。拆箱操作的语法为 <code>unboxing(object)</code>。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="对象转为字符串">对象转为字符串<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E5%AF%B9%E8%B1%A1%E8%BD%AC%E4%B8%BA%E5%AD%97%E7%AC%A6%E4%B8%B2" class="hash-link" aria-label="对象转为字符串的直接链接" title="对象转为字符串的直接链接">​</a></h2>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'world'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// toString world</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'world'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// toString valueOf world, 先执行 toString 方法，如果 toString 方法返回的是非基本类型，则执行 valueOf 方法</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Symbol</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'world'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// toString 报错，因为 Symbol 不能转换为字符串，直接报错，不执行 valueOf 方法</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj3 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// toString valueOf 报错，因为toString 和 valueOf 方法返回的都是非基本类型，直接报错</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="总结">总结<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="总结的直接链接" title="总结的直接链接">​</a></h3>
<ol>
<li>在对象转为字符串的拆箱过程中，会先尝试调用对象的 <code>toString</code> 方法，再尝试调用 <code>valueOf</code> 方法；</li>
<li>若对象的 <code>toString</code> 方法返回的值是基础类型（string、number、boolean），则最终值是 <code>toString</code> 返回值到 <code>string</code> 类型的转换（基础类型 =&gt; string 类型）；</li>
<li>若 <code>toString</code> 返回值非基础类型值：<!-- -->
<ul>
<li>若是 <code>Symbol</code> 类型，则直接抛出错误，中断执行(<code>TypeError: Cannot convert a Symbol value to a string</code>)；</li>
<li>若是对象，或数组，则继续执行 <code>valueOf</code> 方法；</li>
</ul>
</li>
<li>在这一步，若 <code>valueOf</code> 方法返回的是基础类型（string、number、boolean），则最终值是 <code>toString</code> 返回值到 <code>string</code> 类型的转换（基础类型 =&gt; string 类型）；</li>
<li>若 <code>valueOf</code> 返回值非基础类型值：<!-- -->
<ul>
<li>若是 <code>Symbol</code> 类型，则直接抛出错误，中断执行(<code>TypeError: Cannot convert a Symbol value to a string</code>)；</li>
<li>若是对象，或数组，则抛出错误，结束执行(<code>TypeError: Cannot convert object to primitive value</code>)；</li>
</ul>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="对象转为数字">对象转为数字<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E5%AF%B9%E8%B1%A1%E8%BD%AC%E4%B8%BA%E6%95%B0%E5%AD%97" class="hash-link" aria-label="对象转为数字的直接链接" title="对象转为数字的直接链接">​</a></h2>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'world'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Number</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// valueOf NaN，因为 valueOf 方法返回的是基本类型值 `world`，所以下一步是将基本类型转换为数字，但是 world 不能转换为数字，所以最终结果是 NaN；如果 valueOf 方法返回的是可以被转换的值，比如 false 或 "0"，则最终结果是 0</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj1 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Number</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// valueOf toString NaN，因为 valueOf 方法返回的是非基本类型值，所以下一步是调用 toString 方法，但是 hello 不能转换为数字，所以最终结果是 NaN</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj2 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Symbol</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'hello'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">// valueOf 报错，因为 Symbol 不能转换为数字，直接报错，不执行 valueOf 方法</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Number</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj3 </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">toString</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'toString'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(221, 87%, 60%)">valueOf</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(221, 87%, 60%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'valueOf'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(301, 63%, 40%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">Number</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// valueOf toString 报错，因为 valueOf 和 toString 方法返回的都是非基本类型值，直接报错</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="总结-1">总结<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E6%80%BB%E7%BB%93-1" class="hash-link" aria-label="总结的直接链接" title="总结的直接链接">​</a></h3>
<ol>
<li>在对象转为数字的拆箱过程中，会先尝试调用对象的 <code>valueOf</code> 方法，再尝试调用 <code>toString</code> 方法；</li>
<li>若对象的 <code>valueOf</code> 方法返回的值是基础类型（string、number、boolean），则最终值是 <code>valueOf</code> 返回值到数字类型的转换（基础类型 =&gt; number 类型）；</li>
<li>若 <code>valueOf</code> 返回值非基础类型值：<!-- -->
<ul>
<li>若是 <code>Symbol</code> 类型，则直接抛出错误，中断执行(<code>TypeError: Cannot convert a Symbol value to a number</code>)；</li>
<li>若是对象，或数组，则继续执行 <code>toString</code> 方法；</li>
</ul>
</li>
<li>在这一步，若 <code>toString</code> 方法返回的是基础类型（string、number、boolean），则最终值是 <code>valueOf</code> 返回值到数字类型的转换（基础类型 =&gt; number 类型）；</li>
<li>若 <code>toString</code> 返回值非基础类型值：<!-- -->
<ul>
<li>若是 <code>Symbol</code> 类型，则直接抛出错误，中断执行(<code>TypeError: Cannot convert a Symbol value to a number</code>)；</li>
<li>若是对象，或数组，则抛出错误，结束执行(<code>TypeError: Cannot convert object to primitive value</code>)；</li>
</ul>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="拆箱示例">拆箱示例<a href="https://leyla.top/blog/you-dont-know-js-unboxing-detail#%E6%8B%86%E7%AE%B1%E7%A4%BA%E4%BE%8B" class="hash-link" aria-label="拆箱示例的直接链接" title="拆箱示例的直接链接">​</a></h2>
<ul>
<li>运算符拆箱</li>
</ul>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> obj </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(35, 99%, 36%)">console</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token method function property-access" style="color:hsl(221, 87%, 60%)">log</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain">obj </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// Object =&gt; number，因为 `valueOf()` 返回值是 {}， 所以调用了 `toString()`，`toString()` 返回值是 "[object Object]"，所以最终结果是 "[object Object]1"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>前端</category>
            <category>javascript</category>
            <category>你不知道的 js</category>
            <category>拆箱操作</category>
        </item>
        <item>
            <title><![CDATA[你不知道的 parseInt 方法]]></title>
            <link>https://leyla.top/blog/you-dont-know-parseInt-detail</link>
            <guid>https://leyla.top/blog/you-dont-know-parseInt-detail</guid>
            <pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[解释：]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="解释">解释：<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E8%A7%A3%E9%87%8A" class="hash-link" aria-label="解释：的直接链接" title="解释：的直接链接">​</a></h2>
<p>parseInt方法，解析字符串为数字。可以将字符串转换为整数。parseInt方法的语法为parseInt(string, radix)</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="参数">参数<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E5%8F%82%E6%95%B0" class="hash-link" aria-label="参数的直接链接" title="参数的直接链接">​</a></h2>
<p>parseInt方法接受两个参数，第一个参数是要转换的字符串，第二个参数是转换时的基数。</p>
<ul>
<li>第一个参数：理论上来说，接收任意类型的参数，但是只会解析字符串，如果参数不是字符串，会<strong>先强制类型转换为字符串后</strong>，再解析。</li>
<li>第二个参数：解析时的基数，即字符串的进制。参数的取值范围为2-36，当参数大于 10 时，字母 'A' 到 'Z'（大小写均可）被用作 10 到 35 的数字。</li>
</ul>
<p><strong>如果不传入第二个参数，parseInt方法会根据字符串的格式自动判断进制，规则如下：</strong></p>
<ul>
<li>如果字符串以 "0x" 或 "0X" 开头，parseInt会自动将其解释为十六进制数，相当于使用基数 16。</li>
<li>如果字符串以非"0" 开头，会自动将其解释为十进制数，相当于使用基数 10。</li>
<li>如果字符串以 "0" 开头，早期版本的ECMAScript规定解析为八进制数，但是ES5之后规定为十进制数。</li>
<li>如果字符串以+/-号开头，后面跟着数字，会被解释为带符号的十进制数</li>
</ul>
<p><strong>如果传入第二个参数，parseInt方法会根据第二个参数的值进行解析，规则如下：</strong></p>
<ul>
<li>如果第二个参数为0或没有传入，parseInt会根据字符串的格式自动判断进制。</li>
<li>如果第二个参数在2-36之间，parseInt会根据第二个参数的值进行解析。</li>
<li>如果第二个参数不在2-36之间，parseInt会返回NaN。</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="返回值">返回值<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E8%BF%94%E5%9B%9E%E5%80%BC" class="hash-link" aria-label="返回值的直接链接" title="返回值的直接链接">​</a></h2>
<p>parseInt方法的返回值是转换后的整数。如果字符串的第一个字符不能转换为数字，parseInt方法会返回NaN。</p>
<div class="language-markdown codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-markdown codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 0-9、A-Z分别对应0-9、10-35（大小写均可）</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为2时，字符串中的第一位必须是0或1，否则返回NaN；后续字符必须是0或1，否则进行截断处理</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为8时，字符串中的第一位必须是0-7，否则返回NaN；后续字符必须是0-7，否则进行截断处理</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为10时，字符串中的第一位必须是0-9，否则返回NaN；后续字符必须是0-9，否则进行截断处理</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为16时，字符串中的第一位必须是0-9、a-f、A-F，否则返回NaN；后续字符必须是0-9、a-f、A-F，否则进行截断处理</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为19时，字符串中的第一位必须是0-9、a-i、A-I，否则返回NaN；后续字符必须是0-9、a-i、A-I，否则进行截断处理</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token list punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> 当基数为其他值时，字符串中的第一位必须根据其范围确定，否则返回NaN；后续字符必须根据其范围确定，否则进行截断处理</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="注意">注意<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E6%B3%A8%E6%84%8F" class="hash-link" aria-label="注意的直接链接" title="注意的直接链接">​</a></h2>
<p>parseInt解析输入的字符串时，会进行截断处理，直到遇到无法解析的字符为止。比如，parseInt('123.45')，会解析为123，因为小数点后的字符无法解析；parseInt('123abc')，会解析为123，因为遇到无法解析的字符a时，a不在10进制范围内，会停止解析。</p>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'123'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 1 = 1 * 2^2，只解析到第一个字符1，后面的字符不在2进制范围内</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'123'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">8</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 83 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'123'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 123</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'123'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 291 = 1 * 16^2 + 2 * 16^1 + 3 * 16^0</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'F'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 15</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'FF'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 255 parseInt 在截断时，进行贪心匹配</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'G'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// NaN</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'g'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// NaN parseInt对大小写不敏感</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token comment" style="color:hsl(230, 4%, 64%)">// 非字符串参数会被强制转化成字符串,再进行转换, 以下值均为NaN，因为默认基数为10，f 不在10进制范围内</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token known-class-name class-name" style="color:hsl(35, 99%, 36%)">String</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token keyword" style="color:hsl(301, 63%, 40%)">new</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(35, 99%, 36%)">Boolean</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'false'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="奇怪的bug">奇怪的bug<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E5%A5%87%E6%80%AA%E7%9A%84bug" class="hash-link" aria-label="奇怪的bug的直接链接" title="奇怪的bug的直接链接">​</a></h2>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">19</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 18</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">23</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 22</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">24</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 23</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>原因：1/0 为 Infinity，Infinity 转化为字符串为 "Infinity"，"Infinity" 转化为19进制时，会把I解析为18，而n不在19进制范围内，所以会停止解析，返回18。同理，23进制时，会把I解析为22，n不在23进制范围内，返回22。24进制时，会把I解析为23，n不在24进制范围内，返回23。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="补充其他的bug">补充其他的bug<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E8%A1%A5%E5%85%85%E5%85%B6%E4%BB%96%E7%9A%84bug" class="hash-link" aria-label="补充其他的bug的直接链接" title="补充其他的bug的直接链接">​</a></h3>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0.000008</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">       </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 0   ("0" 来自于 "0.000008") String(0.000008) =&gt; "0.000008"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0.0000008</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">      </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 8   ("8" 来自于 "8e-7") String(0.0000008) =&gt; "8e-7"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(35, 99%, 36%)">false</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">      </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 250 ("fa" 来自于 "false") String(false) =&gt; "false"，截取到fa，因为l不在16进制范围内，返回fa</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">   </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 15  ("f" 来自于 "function..") String(parseInt) =&gt; "function.."</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"103"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">       </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 2 截取到10，因为3不在2进制范围内，返回2</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ----------------------------分割线----------------------------</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">" 100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 100 `parseInt`会忽略前后空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">" -17 "</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// -17 `parseInt`会忽略前后空格</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ----------------------------分割线----------------------------</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"F"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">17</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 15</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"F"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">16</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 15</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"1100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(221, 87%, 60%)">+</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"1100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 48 = 12 + 36</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ----------------------------分割线----------------------------</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">0</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 100</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// NaN</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"100"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">37</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// NaN</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token comment" style="color:hsl(230, 4%, 64%)">// ----------------------------分割线----------------------------</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'0b10'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 0 parseInt 不认识字符串的"0b" 二进制前缀，只解析到 "b" 前面的 0。</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0b10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 2 0b10 是一个数字字面量，非严格模式下，会被解析为二进制数，所以0b10 = 1 * 2^1 = 2</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">'0o21'</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 0 parseInt 不认识字符串的"0o" 八进制前缀，只解析到 "o" 前面的 0。</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0o21</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 17 0o21 是一个数字字面量，非严格模式下，会被解析为八进制数，所以0o21 = 2 * 8^1 + 1 * 8^0 = 17</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">0x10</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 16 0x10 是一个数字字面量，非严格模式下，会被解析为十六进制数，所以0x10 = 1 * 16^1 + 0 * 16^0 = 16</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0x10"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">;</span><span class="token plain">         </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 16 ("10" 来自于 "0x10") 字符串以 "0x" 或 "0X" 开头，parseInt 会自动将其解释为十六进制数，相当于使用基数 16。截取掉0x，使用10进行解析，返回16。10 = 1 * 16^1 + 0 * 16^0</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token number" style="color:hsl(35, 99%, 36%)">021</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 17 021 是一个数字字面量，非严格模式下，会被解析为八进制数，所以021 = 2 * 8^1 + 1 * 8^0 = 17</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">parseInt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token string" style="color:hsl(119, 34%, 47%)">"021"</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><span class="token plain"> </span><span class="token comment" style="color:hsl(230, 4%, 64%)">// 21 '021' 是一个字符串，parseInt 函数在解析字符串时，会忽略前导零。</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="补充知识">补充知识：<a href="https://leyla.top/blog/you-dont-know-parseInt-detail#%E8%A1%A5%E5%85%85%E7%9F%A5%E8%AF%86" class="hash-link" aria-label="补充知识：的直接链接" title="补充知识：的直接链接">​</a></h2>
<ul>
<li>0b开头：二进制数</li>
<li>0开头/0o开头：八进制数</li>
<li>0x开头：十六进制数</li>
</ul>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>前端</category>
            <category>javascript</category>
            <category>你不知道的 js</category>
            <category>parseInt</category>
        </item>
        <item>
            <title><![CDATA[axios 适配器以及适配器选择逻辑]]></title>
            <link>https://leyla.top/blog/note/axios-adapter</link>
            <guid>https://leyla.top/blog/note/axios-adapter</guid>
            <pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[axios是什么]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="axios是什么">axios是什么<a href="https://leyla.top/blog/note/axios-adapter#axios%E6%98%AF%E4%BB%80%E4%B9%88" class="hash-link" aria-label="axios是什么的直接链接" title="axios是什么的直接链接">​</a></h2>
<p>axios 是一个基于 promise 的 HTTP 库，可以用于浏览器和 node.js 中。关键词：跨端、基于 promise</p>
<div class="theme-admonition theme-admonition-tip admonition_WQAv alert alert--success"><div class="admonitionHeading_SHZ0"><span class="admonitionIcon_RkoX"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_T2MD"><p>因为本文主要介绍 axios 的适配器，所以不会介绍 axios 的用法和优点。</p></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="axios底层适配器">axios底层适配器<a href="https://leyla.top/blog/note/axios-adapter#axios%E5%BA%95%E5%B1%82%E9%80%82%E9%85%8D%E5%99%A8" class="hash-link" aria-label="axios底层适配器的直接链接" title="axios底层适配器的直接链接">​</a></h2>
<p>在 <span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/adapters.js#L7" target="_blank" rel="noopener noreferrer" class="link">axios 源码</a></span>中定义了3 个 adapters，分别是 http、xhr、fetch。</p>
<div class="language-js codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-js codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token keyword" style="color:hsl(301, 63%, 40%)">const</span><span class="token plain"> knownAdapters </span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">http</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> httpAdapter</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">xhr</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> xhrAdapter</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(5, 74%, 59%)">fetch</span><span class="token operator" style="color:hsl(221, 87%, 60%)">:</span><span class="token plain"> fetchAdapter</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">}</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="httpadapter-底层实现"><span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/http.js" target="_blank" rel="noopener noreferrer" class="link">httpAdapter 底层实现</a></span><a href="https://leyla.top/blog/note/axios-adapter#httpadapter-%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0" class="hash-link" aria-label="httpadapter-底层实现的直接链接" title="httpadapter-底层实现的直接链接">​</a></h3>
<p>httpAdapter 是 axios 的默认适配器，适用于 node 环境，它的底层实现分为2种：</p>
<ul>
<li>默认使用 Node.js 的 <code>http</code> 模块来发送请求；</li>
<li>当 <code>config.maxRedirects</code> 大于 0 时，引入了一个 <code>follow-redirects</code>库进行重定向，使用<span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/http.js#L464" target="_blank" rel="noopener noreferrer" class="link">该库</a></span>的 <code>http.request</code> 或 <code>https.request</code> 方法来发送请求。</li>
</ul>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="xhradapter-底层实现"><span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/xhr.js#L33" target="_blank" rel="noopener noreferrer" class="link">xhrAdapter 底层实现</a></span><a href="https://leyla.top/blog/note/axios-adapter#xhradapter-%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0" class="hash-link" aria-label="xhradapter-底层实现的直接链接" title="xhradapter-底层实现的直接链接">​</a></h3>
<p>xhrAdapter 是 axios 的另一个适配器，适用于浏览器端请求，它直接调用了浏览器原生的 <code>XMLHttpRequest</code> 对象来发送请求。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="fetchadapter-底层实现"><span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/fetch.js#L1" target="_blank" rel="noopener noreferrer" class="link">fetchAdapter 底层实现</a></span><a href="https://leyla.top/blog/note/axios-adapter#fetchadapter-%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0" class="hash-link" aria-label="fetchadapter-底层实现的直接链接" title="fetchadapter-底层实现的直接链接">​</a></h3>
<p>fetchAdapter 适用于浏览器请求，它直接<span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/axios/axios/blob/5064b108de336ff34862650709761b8a96d26be0/lib/adapters/fetch.js#L170" target="_blank" rel="noopener noreferrer" class="link">调用了 <code>fetch</code> 方法</a></span>来发送请求。</p>
<p>在调用 <code>fetch</code> 方法之前，使用原生的 new Request 方法创建了一个 Request 对象，在请求发送后，调用原生的 Response 对象来处理响应。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="适配器的选择逻辑">适配器的选择逻辑<a href="https://leyla.top/blog/note/axios-adapter#%E9%80%82%E9%85%8D%E5%99%A8%E7%9A%84%E9%80%89%E6%8B%A9%E9%80%BB%E8%BE%91" class="hash-link" aria-label="适配器的选择逻辑的直接链接" title="适配器的选择逻辑的直接链接">​</a></h2>
<p>axios 选择适配器的逻辑是按照一个优先级顺序进行的。通常情况下，axios 会优先尝试使用在当前环境中可用的、更现代的适配器。具体的选择逻辑可能略有不同，但大致遵循以下原则：</p>
<ol>
<li>用户指定的适配器: 如果用户在请求配置中明确指定了 adapter 选项，axios 会优先使用用户指定的适配器。</li>
<li>环境检测和默认适配器: 如果用户没有指定适配器，axios 会检测当前环境。<!-- -->
<ul>
<li>在支持 fetch 的浏览器环境中: axios 可能会优先尝试使用 fetch 适配器。</li>
<li>在不支持 fetch 的浏览器环境中 (例如一些旧版浏览器): axios 会回退到使用 xhr 适配器。</li>
<li>在 node 环境中: axios 会使用 http 适配器。</li>
</ul>
</li>
</ol>]]></content:encoded>
            <category>axios</category>
            <category>axios 底层实现</category>
            <category>计算机网络</category>
        </item>
        <item>
            <title><![CDATA[从 0 开始配置 macbook]]></title>
            <link>https://leyla.top/blog/configure-macbook-from-0</link>
            <guid>https://leyla.top/blog/configure-macbook-from-0</guid>
            <pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[不知道是因为摔过一次，还是因为夏天到了，或者是因为 macbook pro 本身散热性能太差，于是我向公司申请了换一台笔记本电脑，但由于众所周知的原因，公司目前没有新的笔记本存活，于是我拿到了一台前人用过的 2019年的 macbook pro。让运维帮忙重装了一下系统，然后开始了我从 0 开始配置的历程。记录一下，供大家学习，也为了以后方便再次配置。]]></description>
            <content:encoded><![CDATA[<p>不知道是因为摔过一次，还是因为夏天到了，或者是因为 macbook pro 本身散热性能太差，于是我向公司申请了换一台笔记本电脑，但由于众所周知的原因，公司目前没有新的笔记本存活，于是我拿到了一台前人用过的 2019年的 macbook pro。让运维帮忙重装了一下系统，然后开始了我从 0 开始配置的历程。记录一下，供大家学习，也为了以后方便再次配置。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="系统升级">系统升级<a href="https://leyla.top/blog/configure-macbook-from-0#%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7" class="hash-link" aria-label="系统升级的直接链接" title="系统升级的直接链接">​</a></h2>
<p>因为拿到的是 2019年的电脑，即使系统重装了，依然是 12.x的系统，一些软件已经不再支持老版本的系统。再加上电脑是 32g 的内存，所以运行速度还算可以，所以我拿到之后，首先升级了一下系统，升级到了 15.4.1。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="软件安装">软件安装<a href="https://leyla.top/blog/configure-macbook-from-0#%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85" class="hash-link" aria-label="软件安装的直接链接" title="软件安装的直接链接">​</a></h2>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="梯子-">梯子 🪜<a href="https://leyla.top/blog/configure-macbook-from-0#%E6%A2%AF%E5%AD%90-" class="hash-link" aria-label="梯子 🪜的直接链接" title="梯子 🪜的直接链接">​</a></h3>
<p>首先是🪜，作用不言而喻，我使用的是<span style="display:inline-flex;gap:0.25rem"><span></span><a href="https://github.com/clash-verge-rev/clash-verge-rev" target="_blank" rel="noopener noreferrer" class="link">clash-verge-rev</a></span>，安装方法是普通的下载安装包，安装。</p>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="使用-brew-安装软件和-cli">使用 brew 安装软件和 cli<a href="https://leyla.top/blog/configure-macbook-from-0#%E4%BD%BF%E7%94%A8-brew-%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6%E5%92%8C-cli" class="hash-link" aria-label="使用 brew 安装软件和 cli的直接链接" title="使用 brew 安装软件和 cli的直接链接">​</a></h3>
<ol>
<li>首先安装 <a href="https://brew.sh/" target="_blank" rel="noopener noreferrer" class="link">brew</a>，使用 <code>brew</code> 安装常用的软件和 cli 。使用 brew 进行软件管理，是因为 brew 可以清晰的管理软件的安装、升级、卸载等。</li>
</ol>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">/bin/bash </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-c</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">$(</span><span class="token string variable function" style="color:hsl(221, 87%, 60%)">curl</span><span class="token string variable" style="color:hsl(221, 87%, 60%)"> </span><span class="token string variable parameter variable" style="color:hsl(221, 87%, 60%)">-fsSL</span><span class="token string variable" style="color:hsl(221, 87%, 60%)"> https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh</span><span class="token string variable" style="color:hsl(221, 87%, 60%)">)</span><span class="token string" style="color:hsl(119, 34%, 47%)">"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="2">
<li>安装程序员常用软件</li>
</ol>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> —-cask google-chrome</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> —-cask iterm2</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> —-cask cursor</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--cask</span><span class="token plain"> dingtalk</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--cask</span><span class="token plain"> chatwise</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--cask</span><span class="token plain"> obsidian</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--cask</span><span class="token plain"> postman</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--cask</span><span class="token plain"> raycast</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> autojump</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">brew </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> lazygit</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="3">
<li>autojump 安装后，需安装提示添加内容到 <code>.zshrc</code>，否则不生效</li>
</ol>
<div class="theme-admonition theme-admonition-tip admonition_WQAv alert alert--success"><div class="admonitionHeading_SHZ0"><span class="admonitionIcon_RkoX"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>提示</div><div class="admonitionContent_T2MD"><p>brew 常用命令：</p><ul>
<li>brew search</li>
<li>brew list</li>
<li>brew install</li>
<li>brew update</li>
<li>brew uninstall</li>
</ul></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="安装-oh-my-zsh">安装 oh-my-zsh<a href="https://leyla.top/blog/configure-macbook-from-0#%E5%AE%89%E8%A3%85-oh-my-zsh" class="hash-link" aria-label="安装 oh-my-zsh的直接链接" title="安装 oh-my-zsh的直接链接">​</a></h3>
<div class="language-javascript codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">sh </span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">c </span><span class="token string" style="color:hsl(119, 34%, 47%)">"$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>安装完成后，在用户根目录下会多一个 <code>.oh-my-zsh</code> 文件夹，进入该文件夹</p>
<div class="language-javascript codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">cd </span><span class="token operator" style="color:hsl(221, 87%, 60%)">~</span><span class="token operator" style="color:hsl(221, 87%, 60%)">/</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">.</span><span class="token property-access">oh</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">my</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">zsh</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="安装并配置主题">安装并配置主题<a href="https://leyla.top/blog/configure-macbook-from-0#%E5%AE%89%E8%A3%85%E5%B9%B6%E9%85%8D%E7%BD%AE%E4%B8%BB%E9%A2%98" class="hash-link" aria-label="安装并配置主题的直接链接" title="安装并配置主题的直接链接">​</a></h4>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> themes</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone git@github.com:romkatv/powerlevel10k.git</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>修改 <code>.zshrc</code>文件，修改<code>ZSH_THEME</code>为以下内容：</p>
<div class="language-javascript codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token constant" style="color:hsl(35, 99%, 36%)">ZSH_THEME</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token string" style="color:hsl(119, 34%, 47%)">"powerlevel10k/powerlevel10k"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>然后重启iterm2，按照自己的喜好一步步进行选择。</p>
<h4 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="安装并配置插件">安装并配置插件<a href="https://leyla.top/blog/configure-macbook-from-0#%E5%AE%89%E8%A3%85%E5%B9%B6%E9%85%8D%E7%BD%AE%E6%8F%92%E4%BB%B6" class="hash-link" aria-label="安装并配置插件的直接链接" title="安装并配置插件的直接链接">​</a></h4>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> plugins</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone https://github.com/zsh-users/zsh-autosuggestions</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone https://github.com/zsh-users/zsh-completions</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone https://github.com/zdharma-continuum/fast-syntax-highlighting.git </span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>修改 <code>.zshrc</code>文件，增加以下内容：</p>
<div class="language-javascript codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-javascript codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">plugins</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  git</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  zsh</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">autosuggestions</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  zsh</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">completions</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  fast</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">syntax</span><span class="token operator" style="color:hsl(221, 87%, 60%)">-</span><span class="token plain">highlighting</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">)</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="theme-admonition theme-admonition-warning admonition_WQAv alert alert--warning"><div class="admonitionHeading_SHZ0"><span class="admonitionIcon_RkoX"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>注意</div><div class="admonitionContent_T2MD"><ol>
<li>修改完 <code>.zshrc</code> 文件，需要 <code>source .zshrc</code> 才能生效；</li>
<li>如果配置完了不生效，可以检查 <code>~/.zshrc</code> 文件下，是否有这一行代码：<code>source $ZSH/oh-my-zsh.sh</code>。我在修改 <code>.zshrc</code> 文件时，不小心把这一行删掉了，导致后面的配置都不生效，耽误了很久。</li>
</ol></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="node">Node<a href="https://leyla.top/blog/configure-macbook-from-0#node" class="hash-link" aria-label="Node的直接链接" title="Node的直接链接">​</a></h3>
<p>安装volta，用于安装node，以及管理 node 版本。安装完 node版本后，npm 版本也就有了。</p>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">curl</span><span class="token plain"> https://get.volta.sh </span><span class="token operator" style="color:hsl(221, 87%, 60%)">|</span><span class="token plain"> </span><span class="token function" style="color:hsl(221, 87%, 60%)">bash</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">volta </span><span class="token function" style="color:hsl(221, 87%, 60%)">install</span><span class="token plain"> node@22</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="通过安装包的方式安装其他软件">通过安装包的方式安装其他软件<a href="https://leyla.top/blog/configure-macbook-from-0#%E9%80%9A%E8%BF%87%E5%AE%89%E8%A3%85%E5%8C%85%E7%9A%84%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85%E5%85%B6%E4%BB%96%E8%BD%AF%E4%BB%B6" class="hash-link" aria-label="通过安装包的方式安装其他软件的直接链接" title="通过安装包的方式安装其他软件的直接链接">​</a></h3>
<ul>
<li><a href="https://bobtranslate.com/" target="_blank" rel="noopener noreferrer" class="link">Bob</a>：通过这次安装，我感受到了Bob 有个缺点，就是没有账户系统，每次更换电脑都需要重装插件</li>
<li><a href="https://z.weixin.qq.com/" target="_blank" rel="noopener noreferrer" class="link">微信输入法</a>：看 <a href="https://sorrycc.com/" target="_blank" rel="noopener noreferrer" class="link">cc 的blog</a>推荐，我开始使用微信输入法，感觉比以前的搜狗好用一些，但是非常新奇的功能还待挖掘</li>
</ul>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="git-配置">Git 配置<a href="https://leyla.top/blog/configure-macbook-from-0#git-%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="Git 配置的直接链接" title="Git 配置的直接链接">​</a></h2>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> config </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--global</span><span class="token plain"> user.name </span><span class="token string" style="color:hsl(119, 34%, 47%)">"Your Name"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> config </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--global</span><span class="token plain"> user.email </span><span class="token string" style="color:hsl(119, 34%, 47%)">"you@your-domain.com"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="ssh-生成及配置">SSH 生成及配置<a href="https://leyla.top/blog/configure-macbook-from-0#ssh-%E7%94%9F%E6%88%90%E5%8F%8A%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="SSH 生成及配置的直接链接" title="SSH 生成及配置的直接链接">​</a></h2>
<div class="language-sh codeBlockContainer_APcc theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_m3Ux"><pre class="prism-code language-sh codeBlock_qGQc thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_p187"><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">mkdir</span><span class="token plain"> ~/.ssh</span><br></span><span class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">ssh-keygen </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-t</span><span class="token plain"> ed25519 </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-C</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"github"</span><br></span></code></pre><div class="buttonGroup_6DOT"><button type="button" aria-label="复制代码到剪贴板" title="复制" class="clean-btn"><span class="copyButtonIcons_FhaS" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_phi_"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_FfTR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>将生成的公钥复制到 gitlab 或 github 的 ssh 中，才能克隆代码</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="npm包安装">npm包安装<a href="https://leyla.top/blog/configure-macbook-from-0#npm%E5%8C%85%E5%AE%89%E8%A3%85" class="hash-link" aria-label="npm包安装的直接链接" title="npm包安装的直接链接">​</a></h2>
<p>全局安装 <a href="https://www.npmjs.com/package/change_user_npmrc" target="_blank" rel="noopener noreferrer" class="link">change_user_npmrc</a>，分别配置了一下 <code>公司</code> 和 <code>个人</code> 的 npm 镜像源。</p>
<p>（这是我自己写的工具包，目的是能在不同的网络下的方便的切换 npm 镜像。今天看了一下，每天居然有零零星星的几个人进行下载，不知道是否帮助到他人了。）</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="总结">总结<a href="https://leyla.top/blog/configure-macbook-from-0#%E6%80%BB%E7%BB%93" class="hash-link" aria-label="总结的直接链接" title="总结的直接链接">​</a></h2>
<p>最后，又下载了一下漂亮的静态壁纸，配置鼠标速度和方向，基本就完成了。至此，基本完成了电脑的配置，我用它已经基本可以前端开发了，后续再有不舒服的地方，再进行调整。</p>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>软件</category>
            <category>develop</category>
            <category>系统</category>
        </item>
        <item>
            <title><![CDATA[第一篇博客]]></title>
            <link>https://leyla.top/blog/my-first-blog</link>
            <guid>https://leyla.top/blog/my-first-blog</guid>
            <pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[这是动笔写的第一篇对外的博客。]]></description>
            <content:encoded><![CDATA[<p>这是动笔写的第一篇对外的博客。</p>
<p>为什么是对外的博客呢？我每天都在用 <code>Obsidian</code> 记录，记录<a class="link" href="https://leyla.top/docs/note">开发笔记</a>、记录每日待办，记录工作，记录投资理财以及一些经常给自己打鸡血的想法。但对外公开的，只有我的<a class="link" href="https://leyla.top/docs/note">开发笔记</a>。因为在我日常记录的随笔，非常随意。把一些随笔公开，我既觉得羞愧，也觉得不堪。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="博客契机">博客契机<a href="https://leyla.top/blog/my-first-blog#%E5%8D%9A%E5%AE%A2%E5%A5%91%E6%9C%BA" class="hash-link" aria-label="博客契机的直接链接" title="博客契机的直接链接">​</a></h2>
<p>我最近在微信公众号上看了一篇推文，推文大概意思是，怎么才能不把日子过得浑浑噩噩呢，那就是记录。记录消费、记录想法，这样在复盘的时候才能有依据，再加上我其实一直都想写博客，再加上今天时间充裕（其实是以前懒惰），开干 😏。</p>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="新建博客模块的目的">新建博客模块的目的<a href="https://leyla.top/blog/my-first-blog#%E6%96%B0%E5%BB%BA%E5%8D%9A%E5%AE%A2%E6%A8%A1%E5%9D%97%E7%9A%84%E7%9B%AE%E7%9A%84" class="hash-link" aria-label="新建博客模块的目的的直接链接" title="新建博客模块的目的的直接链接">​</a></h2>
<ol>
<li>
<p>让自己的网站内容更丰富。除了写博客，我还计划放一个相册模块，放自己旅游和日常的照片，todo永远是做不完的😅</p>
</li>
<li>
<p>审视自己内心的想法，挖掘并剖析内心龌龊切不好意思的想法，把真实的自己暴露在外面。我一直觉得我是一个表里不一的人，做不到百分百真诚，甚至不能直面自己的内心，我属于那种骗着骗着把自己骗过去的类型...</p>
</li>
<li>
<p>通过长篇的博客，勤快的深度思考。我觉得写博客的过程，像是自己与自己辩驳，帮助自己想明白一个事情，有逻辑的总结。</p>
</li>
<li>
<p>锻炼自己的表达和书写能力。其实在码这一篇博客的时候，我就发现我好像失去了中学的写作能力。我不能把我的博客按照我的内心去写下来，或者说，我的内心好像是混沌的。</p>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="博客更新的形式和内容">博客更新的形式和内容<a href="https://leyla.top/blog/my-first-blog#%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0%E7%9A%84%E5%BD%A2%E5%BC%8F%E5%92%8C%E5%86%85%E5%AE%B9" class="hash-link" aria-label="博客更新的形式和内容的直接链接" title="博客更新的形式和内容的直接链接">​</a></h2>
<ol>
<li>
<p>不定时更新</p>
</li>
<li>
<p>前期可能是短篇或流水账为主，因为我现在的语言表达能力有点退化...</p>
</li>
</ol>
<h2 class="anchor anchorWithHideOnScrollNavbar_JnBX" id="最后">最后<a href="https://leyla.top/blog/my-first-blog#%E6%9C%80%E5%90%8E" class="hash-link" aria-label="最后的直接链接" title="最后的直接链接">​</a></h2>
<p>其实我最近也在记周记，每周日更新，从健身、学习、工作、家庭4方面总结。为啥是这4个方面呢？因为这四个方面是我梳理的人生主线。但其实都是记录一下，而且大多是流水账，更没有很直观的数据对比（说到这里又想开发一个周记复盘程序）。</p>
<p>我希望通过开通博客模块，能输出尽量长的内容，无论是否有人看，是否有人爱看。在这个快节奏的时代，我看短剧都要开倍速的时代，长篇的内容，无论对于 author 还是 reader 来说都是一种时间付出。但是我希望通过长篇博客直面自己挖掘内心，如果能与reader 产生共鸣那是更好。</p>]]></content:encoded>
            <author>leylaqiao@gmail.com (Leyla)</author>
            <category>杂谈</category>
        </item>
    </channel>
</rss>