js-interop测试javascript对象是否有属性

时间:2013-05-23 02:52:35

标签: dart dart-js-interop

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

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

1 个答案:

答案 0 :(得分:2)

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


另一种方法是使用:

来处理您的javascript对象,例如Dart Map
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交换。