相关疑难解决方法(0)

为什么 [NaN].includes(NaN) 在 JavaScript 中返回 true?

我熟悉的NaN是在JavaScript中“怪异”的,即NaN === NaN总是返回false,如所描述这里。因此,不应通过===比较来检查NaN,而应使用 isNaN(..) 。

所以我惊讶地发现

> [NaN].includes(NaN)
true
Run Code Online (Sandbox Code Playgroud)

这似乎不一致。为什么会有这种行为?

它是如何工作的?请问includes方法专门检查isNaN

javascript arrays nan ecmascript-6

133
推荐指数
4
解决办法
9427
查看次数

toFixed()和toPrecision()之间的区别?

我是JavaScript的新手,刚刚发现toFixed()toPrecision()编号.但是,我无法弄清楚两者之间的区别是什么.

number.toFixed()和之间有什么区别number.toPrecision()

javascript precision rounding

115
推荐指数
6
解决办法
5万
查看次数

JavaScript中的Number.sign()

想知道是否有任何寻找数字符号(signum函数)的重要方法?
可能是比较明显的解决方案更短/更快/更优雅的解决方案

var sign = number > 0 ? 1 : number < 0 ? -1 : 0;
Run Code Online (Sandbox Code Playgroud)

摘录简短

使用它,你会安全,快速

if (!Math.sign) Math.sign = function(x) { return ((x > 0) - (x < 0)) || +x; };
Run Code Online (Sandbox Code Playgroud)

结果

现在我们有这些解决方案:


1.明显而快速

function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }
Run Code Online (Sandbox Code Playgroud)

1.1.来自kbec的修改- 一种类型转换更少,更高性能,更短[最快]

function sign(x) { return x ? x < 0 ? -1 : 1 …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm numbers sign

100
推荐指数
5
解决办法
3万
查看次数

为什么 Math.min() 从 [+0, 0, -0] 返回 -0

我知道 (-0 === 0) 结果是正确的。我很好奇为什么-0 < 0 会发生?

当我在 stackoverflow 执行上下文中运行此代码时,它返回0.

const arr = [+0, 0, -0];
console.log(Math.min(...arr));
Run Code Online (Sandbox Code Playgroud)

但是当我在浏览器控制台中运行相同的代码时,它返回-0. 这是为什么?我尝试在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会给某些实际例子增加价值,我想了解 JS 是如何计算它的。

 const arr = [+0, 0, -0];
    console.log(Math.min(...arr)); // -0
Run Code Online (Sandbox Code Playgroud)

javascript math floating-point min negative-zero

59
推荐指数
3
解决办法
4293
查看次数

区分+0和-0

事实证明,+0 === -0计算结果为true,尽管+0-0不同的实体.那么,你如何区分+0-0

有一个黑客:

if (1 / myZero > 0) {
   // myZero is +0
} else {
   // myZero is -0
}
Run Code Online (Sandbox Code Playgroud)

我可以做得更好吗?

javascript

36
推荐指数
3
解决办法
2957
查看次数

JavaScript - 检测正零和负零之间的差异

我正在使用MomentJS来计算两次之间的差异.奇怪的是这个库是今天和今天的区别是0.今天和明天的区别是-0.

我的问题是,我如何区分0和-0.似乎JavaScript对待它们是一样的.

例如,如果我编写以下代码:

if (tomorrow === -0)
    console.log('It is tomorrow!');
else if (tomorrow === 0)
    console.log('It is today!');
Run Code Online (Sandbox Code Playgroud)

这是关于JSFiddle如何处理返回值的一个例子(我在澳大利亚,所以取决于你可能需要调整今天和明天的日期)

javascript momentjs

24
推荐指数
2
解决办法
3681
查看次数

用于负零浮点值?

考虑以下C++代码:

double someZero = 0;
std::cout << 0 - someZero << '\n';   // prints 0
std::cout << -someZero << std::endl; // prints -0
Run Code Online (Sandbox Code Playgroud)

问题出现了:什么是负零好处,应该是防御性的避免(即使用减法而不是减去变量)?

c++ floating-point ieee-754

21
推荐指数
2
解决办法
6276
查看次数

+0 和 -0 显示 int 和 float 数据的不同行为

我读过这篇文章负和正零

根据我的理解,以下代码应该给出truetrue 作为输出。

然而,它是给予falsetrue作为输出。

我正在比较负零和正零。

public class Test {
     public static void main(String[] args) {
            float f = 0;
            float f2 = -f;
            Float F = new Float(f);
            Float F1 = new Float(f2);
            System.out.println(F1.equals(F));

            int i = 0;
            int i2 = -i;
            Integer I = new Integer(i);
            Integer I1 = new Integer(i2);
            System.out.println(I1.equals(I));
      }
  }
Run Code Online (Sandbox Code Playgroud)

为什么我们对 0Integer和0 有不同的行为Float

java java-8

14
推荐指数
2
解决办法
411
查看次数

纯函数给出严格相等的参数,产生非严格相等的结果

下面是一个纯函数 f,f(a) !== f(b)尽管a === b(注意严格的等式)对于某些值ab:

var f = function (x) {
   return 1 / x;
}

+0 === -0 // true
f(+0) === f(-0) // false
Run Code Online (Sandbox Code Playgroud)

这些功能的存在可能导致难以发现的错误.还有其他我应该厌倦的例子吗?

javascript

11
推荐指数
2
解决办法
556
查看次数

ECMAScript中"正面"和"负面"是什么意思?+0和-0

我正在阅读ECMAScript 5.1规范.它说:

slice方法有两个参数,startend [...].如果start为负,则将其视为 length + start,其中length是数组的长度.如果end为负,则将其视为length + end,其中length是 数组的长度.

"消极"是什么意思?有道理,像数学一样,

  • 如果num > 0,那么num它是积极的
  • 如果num < 0,那么num是否定的.

但是,我们+0-0?在数学中有一个单一的0,不是积极的,也不是消极的.我的猜测是,在ECMAScript中,

  • +0 (又称正零)是积极的.
  • -0 (又称负零)是否定的.

但是我试着用-0slice,和浏览器把它当作非负.

然后,都是+0-0非正非负,尽管他们的名字?

定义数字的正面或负面在哪里?我没有在ECMAScript规范中找到定义.该定义是否继承自IEEE 754?

javascript specifications language-lawyer

7
推荐指数
1
解决办法
213
查看次数