所有具有属性.length
的javascript buit-in iterables是否能够通过[<numeric index>]
访问其迭代元素,反之亦然?
Array -> has `.length` & has `[]` accessor
String -> has `.length` & has `[]` accessor
TypedArray -> has `.length` & has `[]` accessor
Set -> does not have `.length` & does not have `[]` accessor
Map -> does not have `.length` & does not have `[]` accessor
NodeList -> has `.length` & has `[]` accessor
HTMLCollection -> has `.length` & has `[]` accessor
我不知道是否有其他内置的iterables违反了这条规则。
答案 0 :(得分:2)
我反过来说:
.length
属性[Symbol.iterator]
方法) 1 规范中没有官方设计声明可以保证这一点(特别是作为未来收藏的指南),但我们可以像在您的问题中一样简单地将所有标准内置列表制成表格。
1:请注意String
已经为预期规则提供了一个例外,即迭代值将与索引元素相对应 - 它iterates代码点而不是字符 < / p>
答案 1 :(得分:0)
并非JavaScript中的所有产品都具有属性长度
数组(或序列)具有属性.length
来计算条目数。而地图和集合则使用.size
方法。
基本上.length
用于序列(可索引的数据结构),.size
用于通常无序的集合(例如地图或集合)
iterables(例如数组)不需要.next()
方法,而且很少有方法;相反,它们有一个特殊的方法Symbol.iterator,它将返回一个迭代器(即一个带有.next()方法的对象)。
(编辑@ frxstrem)
答案 2 :(得分:0)
如果它是一个数组,请使用[ $10771 $3802 $4807 $5371 $4255 $4301 $7692 $5962 $6501
$10576 $6910 $11630]
,如果它是一个集合,请使用length