javascript toString()不像以前那样工作了

lpwwtiir  于 2023-03-28  发布在  Java
关注(0)|答案(3)|浏览(149)

我有一个问题。我有一个代码,例如:

var g = "192"; //Global defined//

function g(){

    if (g<200){

        g.toString();
        console.log(typeof(g));
        g++;
        window.setTimeout("rgb()", 3000);

    } else {

        return;
    }}
$(g);

我运行这段代码,第一次它会返回“String”。但是在第二次运行时,它返回“number”。为什么?在函数本身中有g.toString()方法。为什么它在一次运行后就变成了number?
谢谢你的回答!

bvjxkvbb

bvjxkvbb1#

你需要为你的变量指定一个toString,并为你的函数或变量取一个不同的名字,像这样:

var g = "192"; //Global defined//

function test() {

    if (g < 195) {

        g = g.toString();
        console.log(typeof (g));
        g++;
    } else {

        return;
    }
}
test();

查看此fiddle

dluptydi

dluptydi2#

值和函数同名,g,需要保存新值:

var g = "192" //de Global value

function green(){
    g = g.parseInt(g); //de Make sure it's a string.
    if (g<200){
        console.log(typeof(g));
        g++;
        g = g.toString(); //de Make it a string again.
        window.setTimeout("rgb()", 3000);

    } else {

        return;
    }
}

console.log( green() );

1.您需要为变量和函数选择不同的名称。
1.您需要手动存储和更改变量内容。

3ks5zfa0

3ks5zfa03#

Javascript是松散类型的,如果有一个操作强制将字符串作为数字处理,它将尝试将字符串转换为数字。

var a = "12345", b = a;    // "Pure" number strings
var c = "12345eee", d = c;    // "Tainted" number strings"
console.log (a, b, c, d);
console.log (typeof a, typeof b, typeof c, typeof d);
a ++;    // Increment, which forces a cast to a number
b += 1;    // Add 1 to the end, adds '1' to the end of string
c ++;    // Increment, forces cast to a number
d += 1;    // Add 1 to the end, adds '1' to the end of string
console.log (a, b, c, d);
console.log (typeof a, typeof b, typeof c, typeof d);

从输出中可以看到,当递增时(如a和c),它转换为一个数字,然后递增该数字(从而永久地将其转换为一个数字);然而,当在末尾添加一个数字时(如b和d),它获取该数字的字符串并将其添加到字符串中。
您可以在日志中看到,c的值的递增形式是NaN -这是由于试图将C转换为数字的错误,由于字符。

相关问题