我正在学习TypeScript,在入门页面中,他们谈到了javascript是多么出乎意料。
资料来源:https://www.typescriptlang.org/docs/handbook/typescript-from-scratch.html
if ("" == 0) {
// It is! But why??
}
if (1 < x < 3) {
// True for *any* value of x!
}但我仍然不明白为什么1<x<3总是真实的?例如,如果我允许x=10,从逻辑上讲,它不会是真的,但是为什么他们总是这样说呢?
发布于 2021-07-18 00:49:40
1 < x < 3实际上是这样做的:
(1 < x) < 3或者更长的形式:
const tempVarA = 1 < x
const tempVarB = tempVarA < 3所以1 < x要么是true,要么是false。然后下一步是true < 3或false < 3。这些比较没有多大意义,但让我们看看javascript是如何处理的:
console.log(true < 3) // true
console.log(false < 3) // true很奇怪,但让我们更深入地研究:
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) // falsetrue似乎被视为1,false则被视为0。为了验证这一点,让我们与== (而不是===)进行比较,以便它强制我们使用数据的类型。
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,而0和1总是比3少。
解释:
在javascript中,比较操作符<、<=、>、>=、==和!=强制它们的操作数在不同类型时进行比较。因此,当将布尔值与数字进行比较时,它会将布尔值转换为数字,即0或1。
这就是为什么您几乎应该总是使用===而不是==,以及为什么在类型记录中这是一个类型错误:
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)短版
Javascript和类型记录缺少一个可链接的比较操作符。
你是有意这么做的吗?
1 < x && x < 3发布于 2022-05-17 06:50:00
换句话说: true是1,false是0。因此,x=5的1
https://stackoverflow.com/questions/68425193
复制相似问题