isA<T extends JSAny?> 方法

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

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

此方法使用 null、typeofinstanceof 检查的组合来完成此检查。建议使用此方法代替 is 检查。

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

如果 T 不是基本 JS 类型,如 JSArray 或其上的互操作扩展类型,则此方法使用由给定类型名称或 @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?>();