最近在js书籍中看到,定义将用于存储对象的变量时,建议付个初始值null,表明一个空对象,对此倒没有什么大的问题,可是实际业务运用中,常有这种需求,取对象的某个属性去做赋值操作(比如在网络请求成功后的数据处理):
let obj = null,
peopleName = '';
peopleName = obj.name;
这时会报一个语法错误:Cannot read property 'name' of null
而如果给obj的初始值赋值为 {} ,则不会出现这种情况。
那么初值赋予null 不是不实用吗?
null
的意义恰恰就在于在这里会抛出错误,而不是像空对象一样静静地把错误吞掉,返回undefined
。null
用来标志“不存在”或者“未初始化”。试图从一个不存在或者未初始化的变量里读值,本身就是程序设计上的错误。具体到题主的场景(网络请求成功后的数据处理):obj
就不应该是null
,而应该有数据;obj
仍然是null
,这个时候peopleName = obj.name
本身就是bug。如果继续强行渲染到页面,给用户呈现一个“欢迎您,undefined!”,实际上非常尴尬。所以不如直接抛出来,测试的时候容易找到bug,补上一句
if (obj)
,就算没找到,也会停在登陆中的界面。