jsinterop测试javascript对象是否具有属性



是否可以测试javascript对象是否包含属性?

我目前正在为我想访问的每个属性包装try/catch。我认为这不是检查对象上是否存在属性的有效方法。

使用try-catch是更有效的检查方法,因为Dart和Js之间只有一个交换。


另一种方法可以是像Dart Map一样使用处理javascript对象

import 'package:js/js.dart' as js;
import 'package:js/js_wrapping.dart' as jsw;
main() {
  final myProxy = ...;
  Map<String, dynamic> myProxyAsMap = jsw.JsObjectToMapAdapter.cast(proxy);
  Iterable<String> keys = myProxyAsMap.keys;
}

但检查是否为keys.contains("key")的方法比使用try-catch的方法效率低。此外,如果您大量使用此keys,请考虑使用keys = myProxyAsMap.keys.toList()复制列表。实际上,myProxyAsMap.keys仍然是由底层的js数组烘焙的。.toList()将创建一个真正的Dart列表,并阻止Dart-js交换。

最新更新