2

以下代码在 Firefox 上运行良好,但在 chrome 上抛出错误 -SyntaxError: Unexpected token [

我期待这段代码在给定的 div 中附加日期。

var output = document.getElementById('output');
var classes = ['history', 'biology', 'physics'];
var students = 90; 

function getExamDate() {
  return [20, ' March ', 2013, ' 9AM'];
}

var [date, month, year, time] = getExamDate();

output.innerHTML(date + month + year + time);
4

2 回答 2

5

这种说法

var [date, month, year, time] = getExamDate();

是一个解构赋值。它是 ECMAScript 6 的一部分。它在大多数浏览器中尚不可用。

现在,您最好避免分配所有这些变量:

output.innerHTML = getExamDate().join('');

(是的,您还有另一个错误:innerHTML作为属性访问,而不是函数)

这是一篇关于解构赋值的很好的介绍性文章

于 2013-10-11T13:58:18.923 回答
3

工作演示

您正在使用尚未标准的ECMAScript 6功能。Array destructuring只有像 chrome 和 firefox 这样的现代浏览器已经实现了一些功能。当从函数返回多个值时,数组解构是有用的简写,因为我们不再需要环绕一个对象。

在您的情况下,您可以调整代码以返回一个简单的数组,如下面的代码片段所示。

我已经使用isNumber函数来检查数组项是否为数字。如果它是一个字符串,则删除它周围的引号。您将以完全相同的输出结束您。

var output = document.getElementById('output');
var classes = ['history', 'biology', 'physics'];
var students = 90; 

function getExamDate() {
  return [20, ' March ', 2013, ' 9AM'];
}

var temp = getExamDate();

for(var i = 0; i < temp.length; i++) {
    var str = temp[i];

    if(!isNumber(str)) {
       str = str.replace(/"/g, '');
    }

    console.log(str);
} 

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
于 2013-10-11T13:59:07.790 回答