Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.from(Object)和[…Object]之间有什么区别?_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript Array.from(Object)和[…Object]之间有什么区别?

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,除非您不关心较旧的浏览器。通常,与运行时解决方案相比,更

有以下两种ES6方法可以从类似数组或可编辑对象创建数组:

  • 让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,它会为您完成这项工作,而且无法忘记。我有时在需要支持旧浏览器的项目上工作,但大多数项目我不支持旧浏览器,而且我没有在构建中自动包含核心的习惯。