javascript - 为什么语句 `0 < 0.5 < 1` 会减少为假?
问题描述
我最近发现了ECMAScript Spec,我可以用它来回答我已经有Math.random()
一段时间的问题了;即它是否会在0
没有Math.floor()
.
ECMAScript 规范指定 ,0 <= Math.random() < 1
由于某种原因,它与其他任何人都不同。我跳到控制台并运行了一个测试,然后将其保存在我的笔记中,但注意到该语句减少为false
.
下面是一个函数,它测试我认为可能导致这个谎言的比较语句的所有内容。我调用该函数两次以生成两个布尔值数组,结果似乎从字面上暗示了以下语句:0 <= Math.random() < 1
- 并且仅此语句,返回FALSE
它应该返回的位置TRUE
。尤其是当您考虑奖金回合时,我测试了完全相同的语句,但在末尾添加了额外的比较,并且它也返回true
function getTruths( a, b, c ) {
return [
a + 1 < b + 1,
a + 1 < c + 1,
b + 1 < c + 1,
a + 1 < b + 1 < c + 1,
a + 0 < b + 0,
a + 0 < c + 0,
b + 0 < c + 0,
a + 0 < b + 0 < c + 0
];
}
function demonstrate() {
// array of truth
console.log( getTruths( 0, 1, 2 ) );
// array of lies
console.log( getTruths( 0, 0.5, 1 ) );
// bonus round
return [ 0 < 0.5 < 1 < 1.5 ];
}
demonstrate();
所以我做了一些更多的采摘,并了解到不仅仅是这样。似乎a
andb
实际上可以是任何低于 1 且等于或大于 0 的值,只要b
它仍然大于a
,并且当然c
仍然等于1
...并且给定这些参数,无论如何,返回还在FALSE
。如果你添加1
到所有东西,但突然你又恢复了良好状态,就像上面提供的功能一样。
无论如何,有人可以向我解释一下吗?谢谢。
解决方案
a < b < c
被解释为
(a < b) < c
来自关系运算符之类的结果值<
是一个布尔值,真或假。如果c
是数字,则该布尔值将转换为数字,1 ( true
) 或 0 ( false
)。因此c
与 0 或 1 进行比较,而不是与 或 的值进行a
比较b
。
b
写“严格介于a
和c
”之间的正确方法是
a < b && b < c
推荐阅读
- android - 我可以将 Button 放在 ScrollView 内的 ConstraintLayout 的底部吗?
- ubuntu-18.04 - Ubuntu添加用户未设置主目录
- swift - 在 Swift 中将字符串更新/附加到文件末尾的问题
- java - 读取大量数据
- python - 葡萄牙语的 Hunspell 将正确拼写的单词显示为拼写错误
- javascript - 在 Trimble 地图中获取经纬度停靠点
- asp.net-core - 修复了 JSON 引用循环错误而不是我得到太多数据
- volttron - volttron.platform.vip.agent.core 错误:10 秒后没有响应 hello 消息
- sapui5 - 如何避免对分配给“dataSources”的模型数据的额外请求?(组件-preload.js)
- sql - SSRS 报告:如何在单个 tablix 中合并两个数据集,而不需要两个数据集之间的关系