【工具函数】数值+0和-0的区分
<h4>信息卡片</h4>
<ul>
<li>时间 : 2020-01-21 10:20:49 星期二</li>
<li>tag : <code>Number</code></li>
</ul>
<h4>题目描述</h4>
<p>JavaScript的“0”值有两个,+0和-0。
那么怎么区分呢?</p>
<h4>解题思路</h4>
<p>我们看到+0和-0,大概想尝试把该数字通过toString()转化成字符串,在使用indexOf('-')判断是否等于0,或者charAt(0)判断是否等于-。很不幸,数值在进行toString()的时候就自动将其转为0了,所以此方法行不通。</p>
<p>尝试另外一种思路:除法:有+Infinity和-Infinity之分,分别表示正无穷和负无穷。我们就想到使用1/+0或1/-0,来区分</p>
<h4>参考代码</h4>
<pre><code class="language-javascript">function isNegtiveZero(value) {
if (value !== 0) {
throw new RangeError("The argument must be +0 or -0");
}
return 1 / value === -Infinity;
}
console.log(isNegtiveZero(+0) === false);
console.log(isNegtiveZero(-0) === true);</code></pre>
<p>ECMAScript2015添加了一个方法Object.is用于对两数值进行比较,可以用于比较±0</p>
<pre><code class="language-javascript">Object.is(+0, 0) === true;
Object.is(-0, 0) === false;</code></pre>