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

标签 dart dart-js-interop

是否可以测试 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/

相关文章:

dart - 使用 dart 创建一个 javascript 库

typescript - Angular 2,使用 body 作为根选择器,而不是 my-app

flutter - 无法分别构建 Flutter Web 和 Flutter Mobile 应用程序

google-chrome-extension - 在 dart 中构建 chrome 扩展时出现 chrome.runtime.onConnect 问题

dart - 将从 javascript API 返回的 javascript 对象转换为 dart 类

dart - 在比js.context.X更深的功能上使用数组表示法而不是NSM

flutter - 如何在 flutter 应用程序中添加对所有语言环境货币符号的支持

flutter - 如何在flutter中向GridView添加Header?

flutter - Flutter:无法更新变量状态

javascript - Dart 问题 :js calls when compiled to JS