isA<T extends JSAny?> 方法

  1. @Since('3.4')
bool isA<T extends JSAny?>()

判断此 JSAny? 是否是 T 声明的 JavaScript 类型的实例。

此方法通过组合使用 nulltypeofinstanceof 检查来完成此检查。请使用此方法而不是 is 检查。

如果 T 是像 JSString 这样的原始 JS 类型,此方法将使用与该原始类型相对应的 typeof 检查,如 typeofEquals('string')

如果 T 是像 JSArray 或其上的互操作扩展类型这样的非原始 JS 类型,此方法将使用给定的类型名称或 @JS 重命名进行 instanceof 检查,如 instanceOfString('Array')。注意,如果您使用 @JS 注解重命名库,此方法将在 instanceof 检查中使用该重命名,如 instanceOfString('library1.JSClass')

为了确定在 instanceof 检查中作为第二个操作数的 JavaScript 构造函数,此函数使用与扩展类型关联的 JavaScript 名称,该名称是传递给 @JS 注解的参数或 Dart 声明名称。因此,如果您有一个未重命名的包装 JSArray 的互操作扩展类型 JSClass,此方法将执行 instanceOfString('JSClass') 检查而不是 instanceOfString('Array') 检查。

有两个例外。第一个例外是 JSTypedArray。由于在 JavaScript 中不存在 TypedArray 作为属性,此方法执行一些原型检查,以便使 isA<JSTypedArray> 做正确的事情。另一个例外是 JSAny。如果您执行 isA<JSAny> 检查,它将只执行 null 检查。

使用具有对象字面量构造函数的 T 使用此方法将导致错误,因为您可能想使用 JSObject 而不是。

使用包装原始 JS 类型的 T 使用此方法将导致错误,并告诉您使用原始 JS 类型。

实现

@Since('3.4')
external bool isA<T extends JSAny?>();