我有问题。 我有一个代码,例如:
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()方法。为什么一次运行后它会改为数字?
感谢您的回答!
答案 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 :(得分: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转换为数字而导致错误,原因是字符。