使用 undefined 。不要使用null
刚刚阅读了另一个article on ECMAScript,其中提倡null而不是undefined,我想知道微软或TypeScript团队的理由是否为此决定所知?
答案 0 :(得分:10)
指南无需基本原理,可以随意选择要求,以保持代码库的一致性。
对于此准则,undefined
需要输入更多字符,但不需要明确分配给可空变量或属性:
class Foo {
bar: number|undefined;
}
function foo(bar: number|undefined) {}
VS
class Foo {
bar: number|null = null;
}
function foo(bar: number|null = null) {}
此外,在运行时检查null
值的类型不太方便,因为typeof val === 'object'
和null
对象typeof val === 'undefined'
和undefined
onDestroy
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
}
1}} public function redirectTo(){
return '/dynamic_url';
}
。
有一个相关的TSLint规则解决了这个问题,no-null-keyword
。
答案 1 :(得分:4)
几个月前我做了一些研究,我得出的结论是undefined必须优先使用tslint规则'no-null-keyword'。
我试图改变我的代码库,但我遇到了一些问题。 为什么? 因为我使用的API为空字段返回null。
由于tslint三等于规则,我很挣扎。
if (returnedData === undefined) // will be false because returnedData is null
让你有两个选择:
1)在三等分规则中添加一些参数。
“triple-equals”:[true,“allow-null-check”]并执行If (returnedData == null)
allow-null-check允许“==”表示null
2)改为使用If (returnedData)
,但会检查是否为null / undefined /空字符串或零
答案 2 :(得分:1)
为什么在undefined上使用null?
在javascripts中,对象是动态的,没有任何类型信息。为此:
var person
person.namme
可能是拼写错误,也可能是name
属性。如果你使用undefined as null,那你在调试时不会知道:
因此,null优于undefined,您可以推迟:
那说:打字稿是打字的。因此以下代码:
var person
person.namme
会在编译时导致类型错误。因此,不再需要这种意义上的null。
那就是说,我仍然喜欢null而不是undefined。