由于类型为空,无法分配变量?
2019-10-22
66
canvas.getActiveObject().type
返回画布中当前活动元素的类型。
var type = canvas.getActiveObject().type;
if(type){
console.log(type);
}
但是当没有元素处于活动状态时,我得到了 TypeError,这当然是因为没有元素处于活动状态,所以没有任何东西可以从中获取 ActiveObject。
TypeError: canvas.getActiveObject(...) is null
为什么当
activeObject
为
null
时无法分配变量?
当我尝试时,发生了相同的错误
var type = '';
if(canvas.getActiveObject().type){
type = canvas.getActiveObject().type
}
3个回答
canvas.getActiveObject()
返回
null
。
这意味着
canvas.getActiveObject().type
与
null.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