簡體   English   中英

將值傳遞到javascript中的函數

[英]passing values into functions in javascript

不知道為什么下面的代碼不起作用。 它應該接受一個字符串,然后將G轉換為C,將A轉換為T,反之亦然。 但是,它收集輸入字符串,但不提供任何輸出,即警報僅顯示“這是您的反向補體DNA”

var dnaSequence = prompt("Enter your DNA sequence here", "");
var newSequence = reverseComplement(dnaSequence);
alert("here is your reverse complemented DNA: " + newSequence);

function reverseComplement(dnaString) {

    var reverseC = [];
    var dnaArr = dnaString.split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
                break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.reverse().join('');
}

它應該接受一個字符串,然后將G轉換為C,將A轉換為T,反之亦然。

然后,您不需要reverse(),因為您按順序進行推送。

另外,請確保在提示中輸入大寫字母。 否則,您可以強制使用大寫。

這是帶有兩個修復程序的代碼:

function reverseComplement(dnaString) {

    var reverseC = [];
    var dnaArr = dnaString.toUpperCase().split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
              break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.join('');
}

var dnaSequence = prompt("Enter your DNA sequence here", "");
var newSequence = reverseComplement(dnaSequence);
alert("here is your reverse complemented DNA: " + newSequence);

這里需要的主要課程是如何測試和調試JavaScript代碼。

首先,熟悉瀏覽器中的JavaScript調試器。 您可以直接看到它在做什么,而不用想知道為什么您的代碼不起作用。 每個現代的瀏覽器都有內置的JavaScript調試工具; 例如,這里是Chrome DevTools介紹

其次,在測試這樣的函數時,請勿使用prompt()alert() 而是提供一個硬編碼的輸入字符串,並使用console.log()在JavaScript調試控制台中顯示輸出。 這樣,您可以重復運行相同的測試用例。 在使一個測試用例工作后,您可以添加其他用例。

如果您想花哨的話,可以使用幾種JavaScript測試框架,但首先,只需使用硬編碼的輸入和console.log()輸出以及在JavaScript調試器中進行檢查就可以了。

為了使您在初次編寫函數時易於調試,請添加debugger; 開頭的聲明。 然后它將停止在調試器中,您可以單步執行代碼以查看函數的哪些部分實際被執行以及在每一步中所有變量值是什么。

例如(由於聽起來您是在錯誤地使用小寫輸入進行測試),您可以這樣做:

var dnaSequence = 'actg';
var newSequence = reverseComplement(dnaSequence);
console.log(newSequence);

function reverseComplement(dnaString) {
    debugger;

    var reverseC = [];
    var dnaArr = dnaString.split('');

    for (var i = 0; i < dnaArr.length; i++) {

        switch (dnaArr[i]) {
            case 'A':
                reverseC.push('T');
                break;
            case 'T':
                reverseC.push('A');
                break;
            case 'C':
                reverseC.push('G');
                break;
            case 'G':
                reverseC.push('C');
                break;
        }
    }

    // Reverse and rejoin the the string    
    return reverseC.reverse().join('');
}

現在,如果打開了DevTools,它將在調試器的函數第一行停止。 您可以單步執行該函數以查看其實際去往哪些case語句,並且您將發現它對任何一個都不起作用。 您還可以查看dnaArr[i]的值,並查看它是否與任何case值匹配。

暫無
暫無

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

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