javascript - 为什么是 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 < 3
or 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 中,比较运算符<
, <=
, >
, >=
,==
和!=
强制它们的操作数以使它们在不同类型时具有可比性。因此,当将布尔值与数字进行比较时,它将布尔值转换为数字,0
或1
.
这就是为什么您几乎应该总是使用===
而不是==
,以及为什么这是打字稿中的类型错误:
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)
简洁版本
Javascript 和 typescript 缺少可链接的比较运算符。
你的意思是这样做吗?
1 < x && x < 3
解决方案
1 < x < 3
实际上是这样做的:
(1 < x) < 3
或者更长的形式:
const tempVarA = 1 < x
const tempVarB = tempVarA < 3
1 < x
要么 要么true
也是如此false
。然后下一步是true < 3
or 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 中,比较运算符<
, <=
, >
, >=
,==
和!=
强制它们的操作数使它们在不同类型时具有可比性。因此,当将布尔值与数字进行比较时,它将布尔值转换为数字,0
或1
.
这就是为什么您几乎应该总是使用===
而不是==
,以及为什么这是打字稿中的类型错误:
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)
精简版
Javascript 和 typescript 缺少可链接的比较运算符。
你的意思是这样做吗?
1 < x && x < 3
推荐阅读
- c# - C# LINQ 多个数组到简单的对象列表
- javascript - 带有 JS 操作的 PHP SQL 表单 - 仅在单个 div 中而不是全部中显示结果
- identityserver4 - 使用多个 IDServer 保护单个 api 资源
- java - 加密种子的最佳方法是什么?
- javascript - 引导选项卡在模式中无法正常工作
- java - 如何定期执行任务,但在某种程度上,直到最后一个步骤完成后才能开始
- c++ - 特征检测器的线程并行化没有加速
- javascript - 通过数组排序以通过 jQuery 将代码放置在正确的 div 中
- c++ - 改变二维向量中的一个元素会改变所有元素?
- javascript - Material-UI SimpleTable 事件处理
我正在学习 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 < 3
or 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 中,比较运算符<
, <=
, >
, >=
,==
和!=
强制它们的操作数以使它们在不同类型时具有可比性。因此,当将布尔值与数字进行比较时,它将布尔值转换为数字,0
或1
.
这就是为什么您几乎应该总是使用===
而不是==
,以及为什么这是打字稿中的类型错误:
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)
简洁版本
Javascript 和 typescript 缺少可链接的比较运算符。
你的意思是这样做吗?
1 < x && x < 3
解决方案
1 < x < 3
实际上是这样做的:
(1 < x) < 3
或者更长的形式:
const tempVarA = 1 < x
const tempVarB = tempVarA < 3
1 < x
要么 要么true
也是如此false
。然后下一步是true < 3
or 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 中,比较运算符<
, <=
, >
, >=
,==
和!=
强制它们的操作数使它们在不同类型时具有可比性。因此,当将布尔值与数字进行比较时,它将布尔值转换为数字,0
或1
.
这就是为什么您几乎应该总是使用===
而不是==
,以及为什么这是打字稿中的类型错误:
const a = true < 3
// Operator '<' cannot be applied to types 'boolean' and 'number'.(2365)
精简版
Javascript 和 typescript 缺少可链接的比较运算符。
你的意思是这样做吗?
1 < x && x < 3
推荐阅读
- c# - C# LINQ 多个数组到简单的对象列表
- javascript - 带有 JS 操作的 PHP SQL 表单 - 仅在单个 div 中而不是全部中显示结果
- identityserver4 - 使用多个 IDServer 保护单个 api 资源
- java - 加密种子的最佳方法是什么?
- javascript - 引导选项卡在模式中无法正常工作
- java - 如何定期执行任务,但在某种程度上,直到最后一个步骤完成后才能开始
- c++ - 特征检测器的线程并行化没有加速
- javascript - 通过数组排序以通过 jQuery 将代码放置在正确的 div 中
- c++ - 改变二维向量中的一个元素会改变所有元素?
- javascript - Material-UI SimpleTable 事件处理