gpt4 book ai didi

javascript - 为什么 1
转载 作者:行者123 更新时间:2023-12-05 01:06:48 25 4
gpt4 key购买 nike

我正在学习 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,从逻辑上讲它是不正确的,但为什么他们说它总是正确的?

最佳答案

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

(1 < x) < 3

或者更长的形式:

const tempVarA = 1 < x
const tempVarB = tempVarA < 3

所以 1 < xtruefalse .然后下一步是true < 3false < 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) // false

看来true被视为 1false被视为 0 .为了验证,让我们与 == 进行比较(而不是 === ),以便它为我们强制数据的类型。

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

所以 1 < x < 3总是 true 因为 false 变成 0或 true 变为 1 , 和 01总是小于 3 .


解释:

在 javascript 中,比较运算符 < , <= , > , >= , == , 和 !=当它们是不同类型时,强制它们的操作数使它们具有可比性。因此,当将 bool 值与数字进行比较时,它将 bool 值转换为数字 01 .

这就是为什么你应该几乎总是使用 ===而不是 == ,以及为什么这是 typescript 中的类型错误:

const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)

短版

Javascript 和 typescript 缺少可链接的比较运算符。

你的意思是这样做吗?

1 < x && x < 3

关于javascript - 为什么 1<x<3 总是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68425193/

25 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com