Javascript not运算符(!)在TypeScript中的行为是否不同?

Javascript not运算符(!)在TypeScript中的行为是否不同?,javascript,typescript,not-operator,Javascript,Typescript,Not Operator,以下值在JavaScript中被视为“falsy”: 假的 0 '' “” 空的 未定义 楠 TypeScript对not运算符(!)的处理方式是不同的还是相同的?TypeScript的其中一个选项是: 保留所有JavaScript代码的运行时行为 这意味着所有Javascript代码在Typescript代码中的行为都相同。没有例外。您可能会得到额外的语义错误,但如果忽略这些错误,行为仍然是一样的 因此,如果您想知道像这样的运算符在TS中的行为不同,答案总是否定的,根据定义,发出的Java

以下值在JavaScript中被视为“falsy”:

  • 假的
  • 0
  • ''
  • “”
  • 空的
  • 未定义
TypeScript对not运算符(!)的处理方式是不同的还是相同的?

TypeScript的其中一个选项是:

保留所有JavaScript代码的运行时行为

这意味着所有Javascript代码在Typescript代码中的行为都相同。没有例外。您可能会得到额外的语义错误,但如果忽略这些错误,行为仍然是一样的


因此,如果您想知道像
这样的运算符在TS中的行为不同,答案总是否定的,根据定义,发出的JavaScript将与JavaScript工作相同

至于编译器在设计时识别哪些类型,简短的回答是“除NaN之外的所有类型”

现在TypeScript没有对应于
NaN
;它只被视为type
number
。由于一个
数字可以是真实的,也可以是虚假的,
的类型!NaN
只是
布尔值
。对于
NaN
(以及
Infinity
-Infinity
)引入数字文字是一种开放的做法,但我不知道这是否会得到解决

好吧,希望这会有帮助;祝你好运


类型脚本是JavaScript的超集。

Typescript只向JavaScript添加了附加功能。 它不会否定JavaScript的任何特性或功能

JavaScript中的false在TypeScript中也是false。
JavaScript中正确的东西在TypeScript中也同样正确。

TypeScript确实有大量文档,包括操作员行为。。人们花时间去创造和维护这样的。。Devil’s Advocate:如果==运算符应用于特定于TypeScript的代码或特定于TypeScript的上下文(即在普通JavaScript上下文中永远无效的代码)…@user2864740,您可能会在TS中获得额外的语义错误,但如果忽略这些错误(并且您可以忽略TS错误,仍然可以让TSC输出JS代码)该代码在运行时的行为与在JS中的行为相同。@user2864740或者您指的是TS特定的东西,例如类型运算符。。它们位于不同的域中,实际上没有运行时行为。。因此很难与之相比..Devil的论点是==可以以一种不严格违反引号的方式传输(因为并非所有有效的TS都是有效的JS)。然而,这些核心准则的随意性通常令人惊讶。关于TS中==运算符的特定文档将消除这种迂腐论点的依据。@user2864740我认为特定的guidline是TS可用性的核心。我多次看到它被引用为不支持某些功能的原因。我认为没有足够的理由让代码在TS和JS中具有不同的运行时行为。TS的卖点之一是来自JS的简单混合。如果您的代码库的某些部分在运行时在TS和JS中的行为不同,那将是什么样的迁移呢。因此,即使原则上
==
的行为可能有所不同,您也可以将其带到银行,但银行不会这样做
const f0 = !false  // true
const f1 = !0; // true
const f2 = !0n; // true
const f3 = !""; // true
const f4 = !null; // true
const f5 = !undefined; // true
const f6 = !NaN; // boolean (no NaN type in TypeScript)