各位大佬!ts代码里的感叹号连着点(!.)是什么用法?

比如下面这段代码:

    for (let i = 1; i < WEAPON_R_LIST.length; i++) {
        this.weaponArmature!.armatureName = WEAPON_R_LIST[i];
    }

!非空声明

2赞

class 调用方法或者属性的时候,都需要带感叹号吗?

只是用来消除vscode的报错提示

1赞

可以理解为!是你自己100%确定这个对象非空,如果是空就报错。?你把决定权交给编译器,为空就不执行?后面的方法,不为空就执行?后面的方法。
如果你的对象初始化了是非空类型,就不需要这个!或者?。因为你的对象,编译器是不知道是不是为空,如果你使用!,如果程序走到这里是空指针就会报错。不过一般!强制用于数值类的属性,如果是方法可以使用?这样即便是空指针对象也不会报错。
比如 private _vector: Vec3 = new Vec3();
_vector.x = 3;就不用!
private _vector: Vec3 | null = null;
_vector!.x = 3; 就必须用! 如果使用方法就可以使用? _vector?.subtract(…)
总之就是现在的编译器是类型检测类型安全的了。

明白了,多谢多谢!

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。