2015-12-18 122 views
1
//No issues in below: 
let a = [1, 2, 3, 4, 5]; 

for (let i of a) { 
    document.write('<br />' + i); //1 2 3 4 5 
} 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

//No issues in below either 
function add(...numbers: number[]): number { 
    let temp: number = 0; 
    for (var i: number = 0; i < numbers.length; i++) { 
     temp += numbers[i]; 
    } 
    return temp; 
} 

let result: number = add(1,5,8); 
document.body.innerHTML = `Result = ${result}`; //Result = 14 
// +++++++++++++++++++++++++++++++++++++++++++++++++ 

// Hmm! Undefined 
function add(...numbers: number[]): number { 
    let temp: number = 0; 
    for (let i of numbers) { 
     temp += numbers[i]; 
    } 
    return temp; 
} 

let result: number = add(1,5,8); 
document.body.innerHTML = `Result = ${result}`; // Result = NaN 

我想在TypeScript中使用新的“of”循环。 但是,没有按照我的预期工作。例如,在最后一次尝试中,当我预计得到14时,我得到“NaN”值。 我做错了什么?如何在TypeScript中使用for ...循环?

+0

对不起,我在第一次尝试中增加了下面的内容: –

+0

let result:number = add(1,5,8); document.body.innerHTML ='Result = $ {result}'; //结果= 14 –

+0

难道你不是指'temp + = i;'? –

回答

4

for (... of ...)的语法产生阵列而不是它们的指数实际的元件。因此,正确的JavaScript语法很简单:

function add(...numbers) { 
    let sum = 0; 
    for (let i of numbers) { 
     sum += i; 
    } 
    return sum; 
} 

(添加类型注释获得打字稿。)

当然,因为numbers是一个数组ES6还允许您用一行代码做到这一点:

add = (...numbers) => numbers.reduce((x, y) => x + y, 0) 
+0

非常感谢CR。现在很好用:) –