开发者问题收集

由于类型为空,无法分配变量?

2019-10-22
66

canvas.getActiveObject().type 返回画布中当前活动元素的类型。

var type = canvas.getActiveObject().type;
if(type){
     console.log(type);
}

但是当没有元素处于活动状态时,我得到了 TypeError,这当然是因为没有元素处于活动状态,所以没有任何东西可以从中获取 ActiveObject。

TypeError: canvas.getActiveObject(...) is null

为什么当 activeObjectnull 时无法分配变量?

当我尝试时,发生了相同的错误

var type = '';
if(canvas.getActiveObject().type){
    type = canvas.getActiveObject().type
}
3个回答

canvas.getActiveObject() 返回 null

这意味着 canvas.getActiveObject().typenull.type 相同。

引用 null 的任何成员都将引发异常。

您可以通过多种方式解决此问题

三行代码:

let type = '';
if(canvas.getActiveObject()) {
    type = canvas.getActiveObject().type;
}

或一行代码:

let type = canvas.getActiveObject()
   ? canvas.getActiveObject().type
   : '';

或更紧凑的一行代码:

let type = (canvas.getActiveObject() || { type: ''}).type;
Andrew Shepherd
2019-10-22

您不能像对象那样访问空值,我认为您应该像这样安全地访问该值。

var type = '';
if(canvas.getActiveObject() && canvas.getActiveObject().type){
    type = canvas.getActiveObject().type
}
Louay Al-osh
2019-10-22

您似乎正在尝试访问由函数 getActiveObject() 返回的属性 type ,但由于该函数返回 null ,因此访问 type 属性会引发错误。您需要做的是在尝试访问其任何成员之前检查 getActiveObject() 的返回值。

下面的代码片段基于您的代码,它会在尝试访问其中的成员之前检查返回的活动对象是否不为空。

var activeObject = canvas.getActiveObject();
if (activeObject) {
     console.log(activeObject.type);
}
MellowArpeggiation
2019-10-22