尝试更改为IndexOf,但这仍然无法正常工作。我已经将我的代码从ES6转换为ES5,但是它没有出现,因为它应该将chrome输出与IE进行比较。我还想念什么?添加了一个具有javascript代码的代码段,向您展示我正在尝试执行的操作。以下内容无法在IE上运行,但可以在chrome和firefox上运行。 我正在尝试以chrome和IE的二进制格式打印出R T。这些都是通过javascript完成的。请参阅下面的图像以识别问题。看起来在ES6-> ES5之间的转换期间它丢失了一些东西,但是在chrome上仍然可以正常工作。
const mapping = {
R: '1111111111111111111111000000111100000011110000001111111111101111111000110000110011000001101100000011',
T: '1111111111111111111100001100000000110000000011000000001100000000110000000011000000001100000000110000'
};
// Grab the binary mapping of the letter and
// return some HTML
function binaryise(letter) {
var arr = mapping[letter].split('');
return arr.map(function (char) {
return '<div class="' + (char === '0' ? 'zero' : 'one') + '">' + char + '</div>';
}).join('');
}
// For each letter in the word create a
// binary version and return it in a list-item container
function processWord(arr) {
var items = arr.map(function (letter, i) {
var binaryised = binaryise(letter);
return '\n <li class="binaryli" data-id=' + i + '>\n <div class="containerbinary">' + binaryised + '</div>\n </li>\n ';
}).join('');
return '<ul class="binaryul">' + items + '</ul>';
}
// Get a random number that hasn't previously appeared
function getRandom(arr, memo) {
const index = Math.floor(Math.random() * arr.length);
return memo.indexOf(index) > 1 ? getRandom(arr, memo) : index;
}
// Once the html has been added to the page
// (all set with opacity to 0)
// iterate over the letters turning the
// opacity of each to 1
function showLetters(arr, memo) {
memo = memo || [];
if (memo.length !== arr.length) {
var index = getRandom(arr, memo);
var letter = arr[index];
var el = document.querySelector('[data-id="' + index + '"]');
setTimeout(function () {
el.classList.add('show');
memo.push(index);
showLetters(arr, memo);
}, 1000);
}
}
var wordArr = 'RT'.toUpperCase().split('');
// Process all the letters of the word and add them
// to the page...
const html = processWord(wordArr);
output.insertAdjacentHTML('beforeend', html);
// ...then fade them in
showLetters(wordArr);
以下内容不再出现语法错误,但图像显示IE输出与Chrome不同。 CHrome输出以二进制1,0正确显示“ RT”。 IE输出仅在行中写入,并且不能正确显示。 IE代码中可能缺少什么?我相信这可能是这行中的某些内容,但不能确定...返回memo.indexOf(index)> 1吗? getRandom(arr,memo):索引;
显示您在IE与Chrome中发生了什么的图像:
答案 0 :(得分:1)
IE不支持Array.prototype.includes
。
以与IE11兼容的方式编写代码:
function getRandom(arr, memo) {
const index = Math.floor(Math.random() * arr.length);
return memo.indexOf(index) > -1 ? getRandom(arr, memo) : index;
}
代码的第二个问题是逻辑。您的函数不会更改memo
或arr
,因此,如果memo
包含arr
将导致无限递归循环。
如果您想让Babel为您转换代码,则需要使用@babel/preset-env
包并在项目根目录中定义一个.babelrc
文件:
{
"presets": [
[
"@babel/preset-env",
{
"targets": "last 2 versions"
}
]
]
}
这仍然不能解决丢失的Array.prototype.includes
。为此,以及其他缺少的原型功能,请将@babel/polyfill
添加到package.json中,并将其导入Javascript入口点的最顶部。