Javascript IE11对象不';t支持属性或方法';Symbol(Symbol.iterator)_a.2p3bca3ct9h

Javascript IE11对象不';t支持属性或方法';Symbol(Symbol.iterator)_a.2p3bca3ct9h,javascript,angular,internet-explorer,babel-polyfill,Javascript,Angular,Internet Explorer,Babel Polyfill,我使用的是angular8、tslint5.15和typescriptv3 我正在使用下面的代码以ArryaBuffer的形式读取文件 const reader = new FileReader(); reader.readAsArrayBuffer(<FileObject>); reader.onload = () => { this.uploadedData= new Uint8Array(reader.result as ArrayBuffer

我使用的是
angular8、tslint5.15和typescriptv3

我正在使用下面的代码以
ArryaBuffer
的形式读取文件

const reader = new FileReader();
    reader.readAsArrayBuffer(<FileObject>);
    reader.onload = () => {
      this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);
    }
上面的代码在ie11中给出了错误

错误类型错误:对象不支持属性或方法 'Symbol(Symbol.iterator)_a.srxqdvyfxlx'

我试着在网上搜索,发现可能我需要添加
babel polyfill
,但它对我不起作用


有什么帮助吗?

IE11实际上不支持任何ES2015+,因此这意味着没有箭头函数、符号,也没有可编辑项和迭代器。(IE9-IE11确实支持
const
let
,但不正确。它们支持的早期版本不是标准化的版本。最大的差异在于
for
循环。)


如果您想在IE11上运行该代码,则需要将其传输到ES5并添加一些多边形填充。符号和易位性不能正确地进行多重填充,但其他符号和易位性提供了部分功能性的东西。我看到巴贝尔现在建议不要使用自己的
@Babel/polyfill
,而是直接使用(如果需要传输生成器函数)。

将“
core js
”添加到package.json中,并将导入添加到
polyfills.ts

import 'core-js/es6/symbol';

问题与uploadedData参数有关,当我们调用convertLicenseToByteArray方法并使用uploadedData变量时,如果数据未填充或未定义,它将显示此错误

您可以尝试在reader onload函数中调用convertLicenseToByteArray方法

  const reader = new FileReader();    
  reader.onload = (_event) => { 
    this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);   
    console.log(this.convertLicenseToByteArray(this.uploadedData).length);
  } 

对于任何在没有typescript的Aurelia项目中可能遇到此问题的人,我可以通过安装core js来解决此问题,其中包括使此工作正常所需的polyfills

npm安装--保存核心-js@3.6.5

然后,我在.js文件中添加了导入,在那里我遇到了问题,它开始工作


导入“core js”

我尝试了您的建议,但仍然得到了相同的错误!我遵循了与你的答案相似的方法,我相信它会起作用。但是没有运气!新年伊始,事情就这样开始了:)真正意义上的新年快乐!那么,你今年过得怎么样?console.log你的
上传数据
,看看
对象原型中是否存在
Symbol(Symbol.iterator)
。如果不是,它是不可修改的
数据结构,但在我的例子中,它不是未定义的Crowder,您的答案也是正确的,并且解释也很好。但被接受的答案节省了我的时间;)我很高兴能和这样一个正派的人交谈(《新玩具》一书的作者)
  const reader = new FileReader();    
  reader.onload = (_event) => { 
    this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);   
    console.log(this.convertLicenseToByteArray(this.uploadedData).length);
  }