我熟悉的NaN是在JavaScript中“怪异”的,即NaN === NaN总是返回false,如所描述这里。因此,不应通过===比较来检查NaN,而应使用 isNaN(..) 。
所以我惊讶地发现
> [NaN].includes(NaN)
true
Run Code Online (Sandbox Code Playgroud)
这似乎不一致。为什么会有这种行为?
它是如何工作的?请问includes方法专门检查isNaN?
我是JavaScript的新手,刚刚发现toFixed()并toPrecision()编号.但是,我无法弄清楚两者之间的区别是什么.
number.toFixed()和之间有什么区别number.toPrecision()?
想知道是否有任何寻找数字符号(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) 我知道 (-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) 事实证明,+0 === -0计算结果为true,尽管+0和-0是不同的实体.那么,你如何区分+0从-0?
有一个黑客:
if (1 / myZero > 0) {
// myZero is +0
} else {
// myZero is -0
}
Run Code Online (Sandbox Code Playgroud)
我可以做得更好吗?
我正在使用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如何处理返回值的一个例子(我在澳大利亚,所以取决于你可能需要调整今天和明天的日期)
考虑以下C++代码:
double someZero = 0;
std::cout << 0 - someZero << '\n'; // prints 0
std::cout << -someZero << std::endl; // prints -0
Run Code Online (Sandbox Code Playgroud)
问题出现了:什么是负零好处,应该是防御性的避免(即使用减法而不是减去变量)?
我读过这篇文章负和正零。
根据我的理解,以下代码应该给出true 并true 作为输出。
然而,它是给予false和true作为输出。
我正在比较负零和正零。
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?
下面是一个纯函数 f,f(a) !== f(b)尽管a === b(注意严格的等式)对于某些值a和b:
var f = function (x) {
return 1 / x;
}
+0 === -0 // true
f(+0) === f(-0) // false
Run Code Online (Sandbox Code Playgroud)
这些功能的存在可能导致难以发现的错误.还有其他我应该厌倦的例子吗?
我正在阅读ECMAScript 5.1规范.它说:
该
slice方法有两个参数,start和end [...].如果start为负,则将其视为 length + start,其中length是数组的长度.如果end为负,则将其视为length + end,其中length是 数组的长度.
"消极"是什么意思?有道理,像数学一样,
num > 0,那么num它是积极的num < 0,那么num是否定的.但是,我们+0并-0?在数学中有一个单一的0,不是积极的,也不是消极的.我的猜测是,在ECMAScript中,
+0 (又称正零)是积极的.-0 (又称负零)是否定的.但是我试着用-0用slice,和浏览器把它当作非负.
然后,都是+0和-0非正非负,尽管他们的名字?
定义数字的正面或负面在哪里?我没有在ECMAScript规范中找到定义.该定义是否继承自IEEE 754?