IE 控制台错误:SCRIPT438:对象不支持属性或方法“来自”

Posted

技术标签:

【中文标题】IE 控制台错误:SCRIPT438:对象不支持属性或方法“来自”【英文标题】:IE Console Error: SCRIPT438: Object doesn't support property or method 'from' 【发布时间】:2021-02-13 02:31:47 【问题描述】:

我的网站上有一个函数,它接收一组电子邮件字符串并删除所有重复项。但它在 ie 上不起作用,因为我使用了 Array.from 方法。如何转换为以下代码以在 ie 上工作?

let emailsListArray = ['reece@gmail.com', 'someone@gmail.com', 'another@gmail.com', 'reece@gmail.com', 'person@gmail.com', 'another@gmail.com'];


Array.prototype.unique = function() 
    return Array.from(new Set(this));


emailsListArray = emailsListArray.unique();

console.log(emailsListArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【问题讨论】:

IE 有一个 ES5 JS 引擎,所以没有什么比 Set 更接近。您必须手动从数组中删除重复项。 @Teemu 我的 JS 在 php 页面的脚本标签内。我不认为你的解决方案对我有用吗? 也许我的评论有点含糊,“手动”是指something like this,而不是创建Set,它会自动删除重复项。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 你可以参考nafaa的回答的第一种方法。我已经测试过,它在 IE 11 中有效。原始答案使用了 IE 中不支持的箭头函数,我将其转换为 ES5 语法,然后它与 IE 11 兼容。 【参考方案1】:

Set 方法在 ie 中也没有完全支持,所以你有 2 个解决方案:

1:只需使用与所有导航器兼容的数组方法:例如,您可以使用此代码:

Array.prototype.unique = function () 
  return this.reduce(function (acc, el) 
    return acc.indexOf(el) === -1 ? acc.concat(el) : acc;
  , []);
;

2:将 polyfill 文件添加到项目中,您可以在此处找到 array.from polyfill 的示例: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

【讨论】:

以上是关于IE 控制台错误:SCRIPT438:对象不支持属性或方法“来自”的主要内容,如果未能解决你的问题,请参考以下文章

javascript 报Script438:对象不支持deleteAjax属性或方法

IE11 JavaScript(错误:SCRIPT445)“对象不支持此操作”

ie8中不支持Object.create

JavaScript endsWith在IEv10中不起作用?

prepend/append 适用于 Chrome 和 Firefox,但不适用于 IE11 和 Edge

JS与IE8兼容问题 对象不支持此属性或方法