我试着理解如何在以下JavaScript代码中获得真正的逻辑:
var x = "10";
var y = "20";
var result = x + y;
document.getElementById("demo").innerHTML = result;
链接:https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_add_strings4
在“加法”操作中,以下代码的OUTPUT = 1020。在我看来,我认为这是正确的,因为它是两个数字串联的串联。
var x = "100";
var y = "10";
var z = x / y;
document.getElementById("demo").innerHTML = z;
链接:https://www.w3schools.com/js/tryit.asp?filename=tryjs_numbers_string1
但是在“分区”操作中,以下代码的OUTPUT = 10,并且它不能将这两个数字计为字符串。它将这两个数字计算为数字。 ****请有人帮助我,我会清楚地理解它。****
无论您提供何种类型的数据,JavaScript都会尽力给您一个合理的答案。在您的第一个示例中,它看到您将+运算符应用于两个字符串。这是一个有效的事情(连接),因此不执行强制 - 两个字符串连接在一起。
在第二个示例中,它看到您将/运算符应用于两个字符串。这不是一个有效的事情,但将该运算符应用于数字将是有效的,并且您给它的字符串都可以表示为数字,这就是它的作用。它将它们转换为数字然后执行此除法。
这种自动强制可以非常方便(您不必像在其他语言中那样担心JavaScript中的类型)。有时它也可能有点危险,因为它可以给你你不期望的结果,但是一旦你理解了如何以及何时应用强制,危险就会减少一些。
在javascript中,除法运算符隐式地将字符串转换为数字并执行除法。但是对于加法,javascript将其视为字符串并执行连接。
在javascript中,“+”运算符被视为连接运算符,如果任何参数是字符串并且“/”除法运算符只有“与它关联的除法运算”。
var a = "1022"; //variable a&b takes a string.
var b = "2";
var c = a/b; //a and b are converted to number type implicitly
//because strings have no function with '/'.
document.write(c + "<br>"); //prints division between a and b (a/b).
c = toString(); //converts c to string explicitly.
document.write(c); //shows an error as i said string cant be divided!.
如果我帮忙,请告诉我!
JavaScript是一种松散类型的语言。这意味着我们可以使用字符串进行数学运算(例如"100" / "10" === 10
),JavaScript会自动意识到它应该将这些字符串解释为数字。
但那么为什么"10" + "20"
不等于30?
JavaScript(可能很差)决定使用相同的运算符(+
)进行字符串连接以及添加。这意味着他们必须决定在这种情况下是否应该将类似数字的字符串解释为字符串或数字,并且字符串连接获胜。事实上,甚至"10" + 20
和10 + "20"
和10 + "2" + 0
都会产生"1020"
。如果某处有字符串,则字符串连接获胜。
我建议你为此阅读。
http://2ality.com/2013/04/quirk-implicit-conversion.html
基元类型数:操作其他类型,valueOf() - > toString() - > TypeError
基元类型字符串:操作其他类型,toString() - > valueOf() - > TypeError