【问题标题】:JavaScript Number & String declarationJavaScript 数字到字符串声明
【发布时间】:2018-09-02 05:05:29
【问题描述】:

我试图了解如何在以下 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,并且不能将这两个数字计为字符串。它将这两个数字计算为数字。 ****请任何人帮助我,我会清楚地理解它。****

【问题讨论】:

  • / 对非数字毫无意义,因此它将非数字强制转换为数字。 + 的串联对字符串有意义,所以 <string> + <string> 不会导致任何强制。

标签: javascript string numbers concatenation


【解决方案1】:

无论您提供什么类型的数据,JavaScript 都会尽力为您提供合理的答案。在您的第一个示例中,它看到您将 + 运算符应用于两个字符串。这是它要做的有效事情(连接),因此不执行强制 - 两个字符串被连接。

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

这种自动强制转换非常方便(您不必像在其他语言中那样担心 JavaScript 中的类型)。有时它也可能有点危险,因为它会给你带来意想不到的结果,但一旦你了解了强制应用的方式和时间,危险就会减少一些。

【讨论】:

    【解决方案2】:

    在javascript中,除法运算符隐式地将字符串转换为数字并执行除法 但另外,javascript 将其视为字符串并执行连接。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        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!.
        

        如果我有帮助,请告诉我!

        【讨论】:

          【解决方案5】:

          JavaScript 是一种松散类型的语言。这意味着我们可以对字符串进行数学运算(例如"100" / "10" === 10),JavaScript 会自动意识到它应该将这些字符串解释为数字。

          但是为什么"10" + "20" 不等于 30?

          JavaScript(可能很糟糕)决定使用相同的运算符 (+) 进行字符串连接和加法。这意味着他们必须决定在这种情况下是否应该将类似数字的字符串解释为字符串或数字,并且字符串连接获胜。事实上,即使 "10" + 2010 + "20"10 + "2" + 0 都会产生 "1020"。如果有字符串somewhere,则字符串连接获胜。

          【讨论】:

            【解决方案6】:

            我建议为您阅读此内容。

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

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

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

            【讨论】:

              猜你喜欢
              • 2012-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-25
              • 2023-03-11
              • 1970-01-01
              相关资源
              最近更新 更多