JS : 'a' ** 0 = 1
<style>.showBox { font: normal 18px/1.2 sans-serif; overflow: auto; position: relative; }
.showBox p { margin: 10px 0; }
.showBox code, .showBox pre { background: rgba(0,128,128,.25); padding: 2px 6px; tab-size: 4; }
.showBox pre { padding: 10px 20px; white-space: pre-wrap; word-wrap: break-word; }
.showBox pre code { padding: 0; background: none; }
.showBox blockquote { margin: 10px 20px; padding: 2px 15px; border-left: 3px solid skyblue; background: rgba(240,248,255,.65); }
</style>
<div class="showBox">
<p>先看看JS运算式子 ——</p>
<h3> 'a' ** 0 = 1</h3>
<p>
<code>'a' ** 0 = 1</code> 这样的计算式子并不符合数学约定,但在 JS 中可以正常进行计算,答案为 1 。式子中,
<code>'a'</code> 是一个字符,可以是别的任意字符,例如
<code>'我'</code>、
<code>'得瑟'</code>、
<code>'Let it go'</code> 等等都行;
<code>** </code> 是指数运算符,例如求 x 的 y 次方写成
<code>x ** y</code>,等价于 JS 的 Math 方法
<code>Math.pow(x, y)</code>;
<code>0</code> 在式子中是次方的意思。
</p>
<pre><code>console.log('a' ** 0); // → 1
console.log(Math.pow('a', 0)); // → 1</code></pre>
<p>从数学的角度出发,任何非0的数的0次方都等于 1 。上述式子中的
<code>'a'</code>不是数字,理论上不能参与运算,在 JS 中则可以,因为 JS 的数据类型是动态类型即 Dynamically Typed,因此字符串参与数学运算时 JS 一样正常执行:
</p>
<pre><code>console.log('2px' - 10); // → NaN</code></pre>
<p>而
<code>NaN</code> 是一个特殊的数字类型,意为 Not a number,不是一个数字。不是一个数字但属于数字类型,特殊的,于是字符串就可以堂而皇之地参与数学运算。
</p>
<blockquote>
<p>
<em>number</em> 类型代表整数和浮点数,介于 -(25
<sup>3</sup>-1) ~ (25
<sup>3</sup>-1) 之间,超出这个范围的数字可以使用后来增加的
<em>BigInt</em> 类型表示以追求运算的精准度(IE不支持)。
</p>
</blockquote>
<p>求字符串的0次方其实是求 NaN 这个特殊数字的零次方。在JS中,特殊数字还有一个
<code>Infinity</code>,无穷大 ∞。NaN 和 Infinity 既然都是数字,那么,它们的0次方当然就是 1,这是 JS 的运算逻辑。
</p>
<p>无穷大怎么来?</p>
<pre><code>console.log(1 / 0); //→ Infinity</code></pre>
<p>钱不多没有关系,只要是大于0的任意数字,如果0个人平分,你就是比亿万富翁还厉害的主。但千万别小于0,否则你将比亿万负翁要惨到无法形容。0除以0这事别干,NaN 是唯一答案,NaN 这货是一个特殊的数字且具有粘连性,求其0次方你会拿到1块大洋,然而其它任何运算都是 NaN,很遗憾特殊数字不意味着是天文数字。</p>
<p>最后出个题:执行语句
<code>console.log(0 ** 0);</code> 得到什么?
</p>
<p>【提示】在数学中,由于诸多原因,0的0次方未被统一定义。但是,JS老哥是个狠人,为了保持运算一致性,为了遵循 IEEE 754 标准的相关约定……</p>
</div> console.log(0 ** 0);应该也是1,既然console.log('a' ** 0); // → 1,'a' 是任意字符,当然也可以是0啊{:4_173:} console.log('a' ** 2); 应该是 NaN吧?
无论什么的0次方都是1,JS真够狠的。这个以前一点不知道,学习了,感谢黑黑的讲解{:4_187:} 红影 发表于 2026-3-8 19:38
console.log(0 ** 0);应该也是1,既然console.log('a' ** 0); // → 1,'a' 是任意字符,当然也可以是0啊{: ...
正确,理科生对JS运算逻辑的理解还是到位的 红影 发表于 2026-3-8 19:41
console.log('a' ** 2); 应该是 NaN吧?
对。数学能力没减 红影 发表于 2026-3-8 19:41
无论什么的0次方都是1,JS真够狠的。这个以前一点不知道,学习了,感谢黑黑的讲解
其它编程语言不一定这样,JS 相对特殊
页:
[1]