簡體   English   中英

為什么這個javascript代碼不起作用?

[英]Why isn't this javascript code working?

http://jsfiddle.net/LU3pE/

我希望函數將參數轉換為單個字符串並返回它。 我做錯了什么?

function cooncc(divider, lastdiv){
    var returner;
    for (var i = 0; i < (arguments.length - 2); i++)
    {
        returner += arguments[i+2] + divider;
    }
    returner -= divider;
    returner += lastdiv + arguments[arguments.length - 1];
    return divider;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

你做了很多錯事。 以下是您需要修復的細分:

  1. 你正在返回divider 將其改為returner

     return returner; 
  2. 這條線不符合您的期望:

     returner -= divider 

    你不能從字符串中減去字符串,除非它們是數字,這就是你在輸出中得到NaN(非數字)的原因。

    嘗試:

     returner = returner.substring(0,returner.lastIndexOf(divider)); 
  3. 你沒有初始化returner 這將使你的字符串“未定義”。 初始化為空字符串:

     var returner = ""; 
  4. 您將最后一個字符串添加兩次:一次在循環中,然后最后一次使用最后一個分隔符。 只需先停止循環:

     for (var i = 0; i < (arguments.length - 3); i++) 
  5. 最后,想想如果你只用一個字符串來連接它就會發生什么: cooncc(", ", ", and ", "Andy") 您可以使用保護條款解決此問題:

     if(arguments.length == 3) return arguments[2]; 

將參數組成一個字符串? 你的意思是你想要這個輸出嗎?

, , and AndyBeckyCaitlinDaveEricaFergusGaby

如果,是的,您可以使用代碼的這種修改:

function cooncc(divider, lastdiv){
    var returner = "";

    console.log(arguments.length);

    for (var i = 0; i < arguments.length; i++) {
        returner +=  arguments[i];  
    }

    return returner;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

哦,如果你將代碼中的最后一位從return divider改為return returner ,你就得到了

NaN, and Gaby

雖然,我不確定這是不是你想要的。

避開問題,但有更優雅的方式來做你想做的事情:

var names = ["Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby"];
var divider = ', ';
var lastDivider = ' and ';

var concatNames = names.slice(0, -1).join(divider) +
                  lastDivider +
                  names[names.length - 1];

alert(concatNames);

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/join
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/slice

初始化回歸者?

var returner = "";

你不能用字符串:

returner -= divider

你需要初始化返回者,你不能使用 - = with divider。 如果你在返回者之后放置警報(返回者) - =分隔符你得到NaN回來。 試試這個修復。

function cooncc(divider, lastdiv){
    var returner = "";
    for (var i = 0; i < (arguments.length - 3); i++)
    {
        returner += arguments[i+2] + divider;
    }
    returner = returner.substring(0,returner.lastIndexOf(divider));
    returner += lastdiv + arguments[arguments.length - 1];
    return returner;
}
var output = cooncc(", ", ", and ", "Andy", "Becky", "Caitlin", "Dave", "Erica", "Fergus", "Gaby");
document.body.innerHTML = "<h1>" + output + ".</h1>";

你的功能需要重大改寫,這里是工作版:

function cooncc(){
    var arrWords = new Array();
    var divider = arguments[0];
    var lastdiv = arguments[1];
    for (var i = 2; i < arguments.length; i++)
    {
        var curWord = arguments[i];
        if (i == arguments.length - 1 && i > 2) {
            arrWords[arrWords.length - 1] += lastdiv + curWord;
        }
        else {
            arrWords.push(curWord);
        }
    }
    return arrWords.join(arguments[0]);
}

(調用它沒有變化)

更新了jsFiddle: http//jsfiddle.net/yahavbr/LU3pE/1/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM