是否可以测试 javascript 对象是否包含属性?
我目前正在为我想访问的每个属性包装 try/catch。我认为这不是检查对象上是否存在属性的有效方法。
最佳答案
使用 try
-catch
是更有效的检查方式,因为 Dart 和 Js 之间只有一次交换。
另一种方法可能是像 Dart 一样处理您的 javascript 对象 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 交换。
关于dart - js-interop 测试 javascript 对象是否具有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16704903/