Javascript Array.from(Object)和[…Object]之间有什么区别?
有以下两种ES6方法可以从类似数组或可编辑对象创建数组:Javascript Array.from(Object)和[…Object]之间有什么区别?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,有以下两种ES6方法可以从类似数组或可编辑对象创建数组: :让arr=Array.from(对象) :让arr=[…对象] 这两种方法的作用完全相同: let string='foobar'; log([…字符串]); log(Array.from(string))每种语言的功能没有区别,但您几乎可以肯定应该使用扩展语法。原因是语法将由babel、typescript编译器等自动转换。但是您需要为Array.from添加polyfill,除非您不关心较旧的浏览器。通常,与运行时解决方案相比,更
让arr=Array.from(对象)代码>
让arr=[…对象]代码>
let string='foobar';
log([…字符串]);
log(Array.from(string))代码>每种语言的功能没有区别,但您几乎可以肯定应该使用扩展语法。原因是语法将由babel、typescript编译器等自动转换。但是您需要为Array.from
添加polyfill,除非您不关心较旧的浏览器。通常,与运行时解决方案相比,更喜欢编译/构建时解决方案。扩展语法仅适用于实现迭代器方法的对象(Symbol.iterator()
)
另一方面,Array.from()
也适用于不实现iterable方法的类似数组的对象(索引元素)
Array.from()
可用于HTML集合,因为在本例中,这两个集合的结果是相同的,因此具有可读性 @chrispback那是向后的。Transpiler将为您转换语法,但不会自动为全局方法添加polyfill。Array.from
可能会使您与旧浏览器更兼容。我的意思是,以queryselectoral
为例,它是一个类似数组的集合。当引入Symbol.iterator()
时,它很可能是直接实现的,但是元素呢。classList
它返回一个DOMTokenList
,但是一些浏览器供应商可能没有直接实现它的迭代器。这么说来,大多数A级浏览器现在可能都实现了迭代器,用于所有有意义的事情。但是,如果您计划在较旧的浏览器上运行,那么最好进行检查。您能举一个例子,说明索引集合可以使用其中一个而不能使用另一个吗?除了像{a:1,b:2,length:1}
这样的人为设计之外,我的意思是。@JaredSmith我想你的意思是->{0:zero',1:one',length:2}
,虽然人为设计确实显示了区别。@Keith是的,我写这篇文章时没有考虑。无论如何,你都应该包括polyfills来使用更新的功能。Babel只是从
polyfill添加了自己的arrayFrom,并在使用spread语法时调用它。@Bergi是的,但如果您使用Babel/typescript,它会为您完成这项工作,而且无法忘记。我有时在需要支持旧浏览器的项目上工作,但大多数项目我不支持旧浏览器,而且我没有在构建中自动包含核心的习惯。