Javascript错误的变量类型

时间:2018-02-15 12:01:04

标签: javascript jquery typeof

你好,我正在准备一些猜词游戏。 不知何故,我的变量的类型从字符串更改为obj类型,导致未捕获的TypeError。 这是一段代码:

let passwordArray = ["Java Script Developer", "FrontEnd"];
let sample = passwordArray[Math.floor((Math.random() * 
    passwordArray.length))];
let password = sample.toUpperCase();
let new_password = "";

for(let x =0; x<password.length;x++){
    if(password[x]===" "){new_password += " "}
    else{new_password += "-"}
}
$("#password span").text(new_password);

当我想重新编写一封信时,这部分工作出现了相关问题

String.prototype.replaceAt = function(index, replacement){
return this.substr(0,index) + replacement + this.substr(index + replacement.length)
};

function check(num) {
let test = false;
let temp = $(event.target).val();
if(password.indexOf(temp)>-1){test=true; /*alert(test +"/"+temp+"/"+password)*/}
$("#"+num).attr("disabled", true);
if(test === true) {
    $("#"+num).removeClass("letter").addClass("hitletter");
    let indeksy =[];
    for(let i =0; i<password.length;i++ ){
        if(password.charAt(i) === temp){indeksy.push(i)}
    }
    for(let x=0; x<indeksy.length;x++) {
        let indx = indeksy[x];
        new_password = new_password.replaceAt(indx, temp);
    }
    $("#password").html(new_password);
}};

我的HTML基本上只是:

<nav>
    <input type="button" value="o mnie" id="me">
    <input type="button" value="kalkulator" id="cal">
    <input type="button" value="Wisielec" id="wis">
    <input type="button" value="Memory" id="mem">
</nav>
<div id="content"></div>

在JS中动态添加Rest:

$(function() {
    $("#wis").click(function () {
    $("#content").empty().append("" +
        "<div id='container'>\n" +
        "<div id='password'><span>Sample text</span></span></div>\n" +
        "<div id='counter'>Counter: <span id='result'></span></div>\n" +
        "<div id='gibbet' class='image'></div>\n" +
        "<div id='alphabet'></div>\n" +
        "<div id='new'>\n" +
        "<input type='text' id='new_password'/>\n" +
        "<button id='add' onclick='newPass()'>Submit</button>\n" +
        "</div>\n" +
        "</div>"
    );
    start();
});
});

function start(){
    let new_password = "";
    $("#contetn").empty();
    let letters = "";
    for(let i=0; i<32; i++){
        letters += "<input class='letter' type='button' value='"+litery[i]+"' onclick='check("+i+")' id='"+i+"'/>"
}
    $("#alphabet").html(letters);
    $("#result").text(mistakeCounter);

    for(let x =0; x<password.length;x++){
        if(password[x]===" "){new_password += " "}
        else{new_password += "-"}
    }
    $("#password span").text(new_password);
}

问题是,当我想使用函数replaceAt()

时,变量new_password以某种方式从类型字符串更改为类型对象

1 个答案:

答案 0 :(得分:0)

查看你的代码,使用新的String.prototype.replaceAt这种错误可能发生在两种情况下:

当使用replaceAt的变量不是字符串时,例如:

null.replaceAt(someIndex,'someText');
{}.replaceAt(someIndex,'someText');
[].replaceAt(someIndex,'someText');

另一种情况是当你传递null或undefined作为替换时:

"".replaceAt(someIndex,undefined);
"".replaceAt(someIndex,null);

只需添加一些验证码即可正常使用