JavaScript数字和字符串声明

时间:2018-09-02 05:05:30

标签: javascript string numbers concatenation

我试图理解如何获得以下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

以下代码的输出在“加法”操作中= 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

但是,以下代码的输出在“除法”操作中为= 10,并且不能将这两个数字视为字符串。它计算两个数字为数字。 ****请有人帮助我,以便我能清楚地理解它。****

6 个答案:

答案 0 :(得分:0)

JavaScript会尽力为您提供一个合理的答案,而不管您给它什么类型的数据。在第一个示例中,它看到您将+运算符应用于两个字符串。这样做是有效的(串联)操作,因此不执行强制转换-串联两个字符串。

在第二个示例中,您看到将/运算符应用于两个字符串。这不是一件有效的事情,但是将该运算符应用于数字将是有效的,并且您给它提供的字符串都可以表示为数字,因此它就是这样做的。它将它们转换为数字,然后执行此除法。

这种自动强制可以非常方便(您不必像其他语言一样担心JavaScript中的类型)。有时它也会给您带来意想不到的结果,但也会带来一些危险,但是一旦您了解了如何以及何时使用强制,就会减少一些危险。

答案 1 :(得分:0)

在javascript中,除法运算符隐式将字符串转换为数字并执行除法 但除此之外,javascript会将其视为字符串并执行串联。

答案 2 :(得分:0)

在javascript中,如果任何参数为字符串,并且“ /”除法运算符仅具有“除法运算符”,则将“ +”运算符视为串联运算符。

答案 3 :(得分:0)

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!.

让我知道我是否帮忙!

答案 4 :(得分:0)

JavaScript是一种松散类型的语言。这意味着我们可以对字符串进行数学运算(例如 JSONArray jsonArray = new JSONArray(response); for(int i=0;i<jsonArray .length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); ElementChat elementChat = new ElementChat( jsonObject.getInt("color_gr"), jsonObject.getInt("color"), jsonObject.getString("profil"), jsonObject.getString("name"), jsonObject.getString("role"), jsonObject.getLong("date_last"), jsonObject.getLong("date_"), jsonObject.getLong("plus"), jsonObject.getString("did"), jsonObject.getString("id") ); } ),JavaScript会自动意识到它应该将这些字符串解释为数字。

但是为什么ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 不等于30?

JavaScript(可能效果不佳)决定使用相同的运算符("100" / "10" === 10)进行字符串连接和添加。这意味着他们必须决定是将数字型字符串解释为字符串还是在这种情况下解释为数字,才能赢得字符串连接。实际上,甚至"10" + "20"+"10" + 20都将产生10 + "20"。如果存在字符串 somewhere ,则字符串串联会获胜。

答案 5 :(得分:0)

我建议为您阅读。

http://2ality.com/2013/04/quirk-implicit-conversion.html

原始类型编号:操作其他类型,valueOf()-> toString()-> TypeError

原始类型字符串:操作其他类型,toString()-> valueOf()-> TypeError