关于定义对象时null的使用

最近在js书籍中看到,定义将用于存储对象的变量时,建议付个初始值null,表明一个空对象,对此倒没有什么大的问题,可是实际业务运用中,常有这种需求,取对象的某个属性去做赋值操作(比如在网络请求成功后的数据处理):

let obj = null,
    peopleName = '';
peopleName = obj.name;

这时会报一个语法错误:Cannot read property 'name' of null
而如果给obj的初始值赋值为 {} ,则不会出现这种情况。
那么初值赋予null 不是不实用吗?

阅读 2.3k
2 个回答

null的意义恰恰就在于在这里会抛出错误,而不是像空对象一样静静地把错误吞掉,返回undefined


null用来标志“不存在”或者“未初始化”。试图从一个不存在或者未初始化的变量里读值,本身就是程序设计上的错误。具体到题主的场景(网络请求成功后的数据处理):

  1. 如果网络请求成功了,obj就不应该是null,而应该有数据;
  2. 如果网络请求失败了,obj仍然是null,这个时候peopleName = obj.name本身就是bug。

如果继续强行渲染到页面,给用户呈现一个“欢迎您,undefined!”,实际上非常尴尬。所以不如直接抛出来,测试的时候容易找到bug,补上一句if (obj),就算没找到,也会停在登陆中的界面。

因为obj={} 并不是一个完全为空的对象,他有从原型链上面继承过来的对象而null才是一个真正的空对象,什么都没有,节省内存空间,具体环境具体分析吧

推荐问题
宣传栏