3

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

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

4

1 回答 1

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;
}

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

于 2013-05-23T07:48:37.293 回答