使用未定义的。不要使用null
我刚刚读了另一个关于ECMAScript的文章,它提倡null而不是未定义,我想知道微软或TypeScript团队的理论基础是这个决定吗?
发布于 2018-04-10 06:49:26
指导原则不需要任何理由,为了保持代码库的一致性,可以随意选择需求。
对于这个准则,undefined
需要更多的字符来输入,但不需要显式地分配给可空变量或属性:
class Foo {
bar: number|undefined;
}
function foo(bar: number|undefined) {}
与
class Foo {
bar: number|null = null;
}
function foo(bar: number|null = null) {}
而且,在运行时检查null
值的类型也不太方便,因为typeof val === 'object'
用于null
和对象值,而对于undefined
则是typeof val === 'undefined'
。
有相关的TSLint规则可以解决这个问题,no-null-keyword
。
发布于 2018-04-10 08:29:59
几个月前,我做了一些研究,我得出了这样一个事实:未定义的必须使用tslint规则“no-null-关键字”来确定优先级。
我试图更改我的代码库,但我遇到了一些问题。为什么?因为我使用的API返回空字段的空值。
我挣扎是因为tslint的三等号规则。
if (returnedData === undefined) // will be false because returnedData is null
这让你有两个选择:
1)向您的三等号规则中添加一些参数。
“三重等于”:true,“允许-空-检查”并执行If (returnedData == null)
。
允许-空-检查允许"==“是否为空。
2)使用If (returnedData)
代替,但它检查null/未定义/空字符串还是零
发布于 2018-04-10 07:08:24
为什么在未定义的情况下使用null?
在javascripts中,对象是动态的,没有任何类型信息。为此:
var person
person.namme
可能是拼写错误,也可能是name
属性。如果使用未定义为null,则在调试时不知道以下情况:
因此,与未定义的null相比,null更可取,因此您可以在以下几个方面进行延迟:
话虽如此:打字本是打字的。因此,以下代码:
var person
person.namme
在编译时会导致类型错误。因此,不再需要这种意义上的null。
尽管如此,我仍然倾向于null而不是未定义的。
https://stackoverflow.com/questions/49746803
复制相似问题