JavaScript整数导致NaN

时间:2011-08-31 15:22:50

标签: javascript variable-types

我的JavaScript基本上如下所示

function a() {
    b(1);
}

function b(myNumber) {
    c(myNumber);
}

function c(myNumber) {
    var calculation = 5 * (myNumber - 1);
    alert(calculation);
}

当我调用函数a()时,警告框最终会显示“NaN”。为什么会这样?我尝试在很多地方使用parseInt()功能,但似乎没有任何效果。

修改

完整代码(实际上是做什么而不是剥离的示例):

function updateTablePagination(tableId, rowsPerPageSelectId) {
    updateTablePagination(tableId, rowsPerPageSelectId, 1);
}

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    var table = document.getElementById(tableId);
    var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
    var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;

    updateTable(table, rowsPerPage, pageNumber);
    //updateTablePageLinks();
}

function updateTable(table, rowsPerPage, pageNumber) {
    var tableRows = table.getElementsByTagName("tr");
    var totalNumberOfRows = tableRows.length;

    var startRow = rowsPerPage * (pageNumber - 1);      
     var endRow = Math.min(startRow + rowsPerPage, totalNumberOfRows - 1);

    alert("Start: " + startRow + "\nEnd: " + endRow);
}

选择框中有一个onchange来电updateTablePagination('myTableId', 'rowsPerPage')。 ids都是正确的。

“开始”和“结束”都是NaN。

编辑2

或者,如果我只是alert(pageNumber),那么它是未定义的。

简化

即使这样说pageNumber未定义:

function updateTablePagination(tableId, rowsPerPageSelectId) {
    updateTablePagination(tableId, rowsPerPageSelectId, 1);
}

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    alert(pageNumber);
}

2 个答案:

答案 0 :(得分:6)

您有两个名为updateTablePagination的函数。 Javascript不支持函数重载。摆脱第一个声明,因为它被第二个声明覆盖。您可以使用||为参数定义默认值。

function updateTablePagination(tableId, rowsPerPageSelectId, pageNumber) {
    pageNumber = pageNumber || 1; //Set a default value for pageNumber
    var table = document.getElementById(tableId);
    var rowsPerPageSelect = document.getElementById(rowsPerPageSelectId);
    var rowsPerPage = rowsPerPageSelect.options[rowsPerPageSelect.selectedIndex].text;

    updateTable(table, rowsPerPage, pageNumber);
    //updateTablePageLinks();
}


updateTablePagination(tableId, rowsPerPageSelectId) //Will call the function with pageNumber == 1

答案 1 :(得分:2)

问题是你要覆盖功能。有了这个:

function a() {
    a(1)
}

function a(x) {
    alert(x);
}

调用a将始终调用第二个(覆盖)函数,因此x始终未定义。你想要像重载一样的东西。在这种情况下,最好的办法是使用||运算符作为默认值:

function a(x) {
    var x = x || 1; // x if x is given, otherwise 1
    alert(x);
}