toString()不像以前那样工作

时间:2014-02-17 20:30:36

标签: javascript string function tostring

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

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”。但在第二轮,它返回“数字”。为什么?在函数本身中有g.toString()方法。为什么一次运行后它会改为数字?

感谢您的回答!

3 个答案:

答案 0 :(得分:0)

值和函数具有相同的名称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. 您需要为变量和函数选择不同的名称。
  2. 您需要手动存储和更改变量内容。

答案 1 :(得分:0)

您需要将String分配给您的变量,并为您的函数或变量指定不同的名称,如下所示:

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

function test() {

    if (g < 195) {

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

        return;
    }
}
test();

请参阅此fiddle

答案 2 :(得分:0)

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转换为数字而导致错误,原因是字符。