当前位置: 首页 > 知识库问答 >
问题:

检查某物是否可迭代

羊舌洛华
2023-03-14

在MDN文档中:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

用于。。。of构造被描述为能够在“iterable”对象上迭代。但是有没有一个好的方法来决定一个对象是否是可移植的呢?

我试图找到数组、迭代器和生成器的公共属性,但无法做到这一点。

除了为。。。检查try块中的,并检查类型错误,是否有干净的方法?

共有3个答案

施俊明
2023-03-14

为什么这么罗嗦?

const isIterable = object =>
  object != null && typeof object[Symbol.iterator] === 'function'
栾景胜
2023-03-14

最简单的解决办法其实是这样的:

function isIterable (value) {
  return Symbol.iterator in Object(value);
}

Object将非对象的任何内容封装在一个对象中,允许in操作符工作,即使原始值不是对象nullundefined被转换为空对象,因此不需要进行边缘大小写检测,字符串被包装成可编辑的字符串对象。

张嘉熙
2023-03-14

检查易位性的正确方法如下:

function isIterable(obj) {
  // checks for null and undefined
  if (obj == null) {
    return false;
  }
  return typeof obj[Symbol.iterator] === 'function';
}

为什么这样做(深入了解iterable协议):https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Iteration_protocols

既然我们谈论的是。。当然,我认为,我们正处于ES6心态。

另外,当字符串在其字符上迭代时,如果obj是一个字符串,那么这个函数返回true也不要感到惊讶。

 类似资料:
  • 我有一个函数需要一个iterable: 在javascript中,我将利用: 取自Tomas Kulich的原始答案。 这将导致下一个代码: 有没有一种方法可以利用TypeScript的打字功能而不是使用这个即时功能?

  • 问题内容: 我正在使用AndEngine将精灵添加到屏幕上,并使用movemodifier方法遇到。 我有两个整数MaxDuration和MinDuration; 我想要做的是当用户达到一定增量的分数时。 例如,当用户达到20(整数改变)时,用户达到40(整数改变)。因此,基本上是20分,每次得分遇到一个20分之一的数字,即整数的变化。我希望这是有道理的。 有什么方法或方法可以做到这一点吗?我有一

  • 问题内容: 我正在寻找一种找出模块是否可用的方法。 例如,我想以编程方式检查该模块是否可用。 另外,如果没有找到模块,它也不应停止程序,我想自己处理。 PS:我添加了这个问题,因为Google并没有帮助。 问题答案: 如果您只想检查模块是否可用(如果不可用则不加载),还有一种更聪明的方法:

  • 所以,我正在尝试检查用户是否在某个消息中被@过。这就是我目前拥有的: (它包装在客户端中。当检测到消息发送时) 我在这里做错了什么?

  • 问题内容: 试一试无用的东西只是看看此代码是否引发了特定的异常,这是一个好方法吗? 我想在引发异常时做点什么,否则就什么也不做。 有太多的先决条件要测试,构造函数BigDecimal()始终检查所有条件,因此这似乎是最简单的方法。 问题答案: 通常,应避免这种做法。但是,由于没有实用程序方法,所以这是要走的路。 正如Peter Tillemans在评论中指出的那样,将此代码放在称为的实用程序方法中

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。