isA<T extends JSAny?> 方法
- @Since('3.4')
判断此 JSAny?
是否是 T
声明的 JavaScript 类型的实例。
此方法通过组合使用 null
、typeof
和 instanceof
检查来完成此检查。请使用此方法而不是 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?>();