请不要对我太过刻苦,因为我刚从学校开始,而且我正在使用Ubuntu。我编写了这段代码(可能是有史以来最简单的代码),它简单地讲述了将字节转换为其他单元(Mebi,Kibi ......)。当我使用console.log时,它总是显示Kibi。
function unit(x){
var x;
if (x=10){
x='Kibi';
} else if (x=20){
x='Mebi';
} else if (x=30){
x='Gibi';
}
return x;
}
console.log("2^10 bytes are 1 " + unit(10) + "byte");
console.log("2^20 bytes are 1 " + unit(20) + "byte");
console.log("2^30 bytes are 1 " + unit(30) + "byte");

这里的事情是,正如我所说它总是在所有控制台输出上显示Kibi,对我来说有趣的事情是我不明白,如果我改变了第一个console.log
console.log('2^10 bytes are 1 ' + unit(20) + 'byte'

即使我从未调用过单位(10),它仍会显示所有控制台输出和Kibi。
我真的不明白为什么会这样,任何帮助都会非常值得赞赏。谢谢。
答案 0 :(得分:1)
您已声明变量x而未为其设置值,并且=仅对于左侧分配,请遵循我的代码
继承我的代码:
function unit(x){
var nickname = '';
if (x===10){
nickname='Kibi';
} else if (x===20){
nickname ='Mebi';
} else if (x===30){
nickname ='Gibi';
}
return nickname;
}
console.log("2^10 bytes are 1 " + unit(10) + "byte");
console.log("2^20 bytes are 1 " + unit(20) + "byte");
console.log("2^30 bytes are 1 " + unit(30) + "byte");

您的代码错误:
希望能帮到你
对于你的问题,也许这段代码会更好
function unit(x){
var nickname = '';
switch(x){
case 10:
nickname = 'kibi';
break;
case 20:
nickname = 'Mebi';
break;
case 30:
nickname = 'Gibi';
break;
}
return nickname;
}
console.log("2^10 bytes are 1 " + unit(10) + "byte");
console.log("2^20 bytes are 1 " + unit(20) + "byte");
console.log("2^30 bytes are 1 " + unit(30) + "byte");

变量不应该有歧义,一个变量做一件事。
你可以关注@epascarello和@Keith的建议
答案 1 :(得分:0)
此代码段中所有更改的内容正是两条评论所建议的内容。删除x的额外初始化并更改" ="到" =="在比较中。
function unit(x){
if (x == 10){
x='Kibi';
} else if (x == 20){
x='Mebi';
} else if (x == 30){
x='Gibi';
}
return x;
}
console.log("2^10 bytes are 1 " + unit(10) + "byte");
console.log("2^20 bytes are 1 " + unit(20) + "byte");
console.log("2^30 bytes are 1 " + unit(30) + "byte");