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

来源https ://www,javascript,typescript"/>

首页 > 解决方案 > 为什么是 1

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

来源https ://www

问题描述

我正在学习 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 < x要么 要么true也是如此false。然后下一步是true < 3or 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) // false

似乎true正在被视为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总是真的,因为假的变成了0或真的变成1了,而且两者都0总是1小于3


解释:

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

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

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

简洁版本

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

你的意思是这样做吗?

1 < x && x < 3

标签: javascripttypescript

解决方案


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

(1 < x) < 3

或者更长的形式:

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

1 < x要么 要么true也是如此false。然后下一步是true < 3or 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) // false

似乎true正在被视为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总是真的,因为假的变成了0或真的变成1了,而且两者都0总是1小于3


解释:

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

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

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

精简版

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

你的意思是这样做吗?

1 < x && x < 3

推荐阅读