首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么1<x<3总是真实的?

为什么1<x<3总是真实的?
EN

Stack Overflow用户
提问于 2021-07-18 00:34:56
回答 2查看 483关注 0票数 3

我正在学习TypeScript,在入门页面中,他们谈到了javascript是多么出乎意料。

资料来源https://www.typescriptlang.org/docs/handbook/typescript-from-scratch.html

代码语言:javascript
复制
if ("" == 0) {
// It is! But why??
}
if (1 < x < 3) {
// True for *any* value of x!
}

但我仍然不明白为什么1<x<3总是真实的?例如,如果我允许x=10,从逻辑上讲,它不会是真的,但是为什么他们总是这样说呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-18 00:49:40

1 < x < 3实际上是这样做的:

代码语言:javascript
复制
(1 < x) < 3

或者更长的形式:

代码语言:javascript
复制
const tempVarA = 1 < x
const tempVarB = tempVarA < 3

所以1 < x要么是true,要么是false。然后下一步是true < 3false < 3。这些比较没有多大意义,但让我们看看javascript是如何处理的:

代码语言:javascript
复制
console.log(true < 3) // true
console.log(false < 3) // true

很奇怪,但让我们更深入地研究:

代码语言:javascript
复制
console.log(true >= 0) // true
console.log(true >= 1) // true
console.log(true >= 2) // false

console.log(false >= 0) // true
console.log(false >= 1) // false
console.log(false >= 2) // false

true似乎被视为1false则被视为0。为了验证这一点,让我们与== (而不是===)进行比较,以便它强制我们使用数据的类型。

代码语言:javascript
复制
console.log(true == 1) // true
console.log(true == 0) // false
console.log(false == 1) // false
console.log(false == 0) // true

所以1 < x < 3总是真的,因为false变成0,true变成1,而01总是比3少。

解释:

在javascript中,比较操作符<<=>>===!=强制它们的操作数在不同类型时进行比较。因此,当将布尔值与数字进行比较时,它会将布尔值转换为数字,即01

这就是为什么您几乎应该总是使用===而不是==,以及为什么在类型记录中这是一个类型错误:

代码语言:javascript
复制
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)

短版

Javascript和类型记录缺少一个可链接的比较操作符。

你是有意这么做的吗?

代码语言:javascript
复制
1 < x && x < 3
票数 7
EN

Stack Overflow用户

发布于 2022-05-17 06:50:00

换句话说: true是1,false是0。因此,x=5的1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68425193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档