JavaScript 字符串和数字转换

IT技术 javascript string numbers
2021-01-26 07:13:43

如何在 JavaScript 中执行以下操作?

  1. 将“1”、“2”、“3”连接成“123”

  2. 将“123”转换为 123

  3. 加 123 + 100 = 223

  4. 将 223 转换为“223”

6个回答

您想熟悉parseInt()toString()

在你的工具包中有用的是查看一个变量来找出它是什么类型—— typeof

<script type="text/javascript">
    /**
     * print out the value and the type of the variable passed in
     */

    function printWithType(val) {
        document.write('<pre>');
        document.write(val);
        document.write(' ');
        document.writeln(typeof val);
        document.write('</pre>');
    }

    var a = "1", b = "2", c = "3", result;

    // Step (1) Concatenate "1", "2", "3" into "123"
    // - concatenation operator is just "+", as long
    //   as all the items are strings, this works
    result = a + b + c;
    printWithType(result); //123 string

    // - If they were not strings you could do
    result = a.toString() + b.toString() + c.toString();
    printWithType(result); // 123 string

    // Step (2) Convert "123" into 123
    result = parseInt(result,10);
    printWithType(result); // 123 number

    // Step (3) Add 123 + 100 = 223
    result = result + 100;
    printWithType(result); // 223 number

    // Step (4) Convert 223 into "223"
    result = result.toString(); //
    printWithType(result); // 223 string

    // If you concatenate a number with a 
    // blank string, you get a string    
    result = result + "";
    printWithType(result); //223 string
</script>
你把它放在脚本标签中的任何特殊原因?
2021-03-24 07:13:43
@Julix 对于 2009 年的新手,放入 html 文件以学习基本概念。如果我今天新鲜地回答这个问题,我可能会以不同的方式回答,但也许不会。
2021-03-25 07:13:43

步骤(1)将“1”、“2”、“3”连接成“123”

 "1" + "2" + "3"

或者

 ["1", "2", "3"].join("")

加入方法符连接的阵列的物品转换成字符串,将项目间的指定的分隔符。在这种情况下,“分隔符”是一个空字符串 ( "")。


步骤(2)将“123”转换为123

 parseInt("123")

ECMAScript 5之前,有必要传递基数为 10 的基数:parseInt("123", 10)


步骤 (3) 加 123 + 100 = 223

 123 + 100


步骤(4)将223转换成“223”

 (223).toString() 


放在一起

 (parseInt("1" + "2" + "3") + 100).toString()

或者

 (parseInt(["1", "2", "3"].join("")) + 100).toString()
包括基数让我感到困惑,我滚动到另一个解释它的答案。在快速解释中进行了编辑,以解决混淆问题。
2021-03-25 07:13:43
@ArtOfWarfare 谢谢,好的编辑。在这个答案的时候,基数是必要的。这些天,我可以提出一个论点将其排除在外。从所有“现代”浏览器和 Node.js 都支持的 ES5 开始, parseInt(<a string with only 0-9>) 总是使用基数 10。
2021-04-02 07:13:43
有趣的事实.. 在 Netscape 的原始 JavaScript(大约 1995 年)中,parseInt 的默认基数是 8(除非包含的字符串是 8 或 9)
2021-04-03 07:13:43
很好,很清楚的例子。此外,对良好形式的荣誉 - 您应该始终指定parseInt函数的基数
2021-04-10 07:13:43
r = ("1"+"2"+"3")           // step1 | build string ==> "123"
r = +r                      // step2 | to number    ==> 123
r = r+100                   // step3 | +100         ==> 223
r = ""+r                    // step4 | to string    ==> "223"

//in one line
r = ""+(+("1"+"2"+"3")+100);
感谢您的快速字符串--> 数字转换
2021-03-21 07:13:43
如果您检查它是否为数字,则使用 parseInt()。例如, parseInt(" ") 是 NaN,但 +" " 是 0!
2021-04-01 07:13:43

由于 JavaScript 的类型系统,这些问题一直出现。人们在获取数字字符串时认为他们正在获取一个数字。

这里有一些你可能会看到的东西,它们利用了 JavaScript 处理字符串和数字的方式。就我个人而言,我希望 JavaScript 在字符串连接中使用了除+ 之外的其他符号

步骤(1)将“1”、“2”、“3”连接成“123”

result = "1" + "2" + "3";

步骤(2)将“123”转换为123

result = +"123";

步骤 (3) 加 123 + 100 = 223

result = 123 + 100;

步骤 (4) 将 223 转换为“223”

result = "" + 223;

如果您知道这些工作的原因,您就不太可能遇到 JavaScript 表达式的麻烦。

尽管如此,了解这些内容将有助于防止出现问题,即缺乏关于 JavaScript 如何处理字符串和数字的知识。这是一个求知欲的问题。将数字添加到字符串时会发生什么?一元加如何工作?如果你不知道答案,你就不是真的懂 JavaScript,这样的问题就会出现。
2021-03-17 07:13:43
不过,您应该通过压缩工具来实现这一点,在这种形式下,它以非常实际的维护成本进行了优化。
2021-03-19 07:13:43
我实际上认为这是非常糟糕的做法,因为它正在发生的事情相当不透明。知道某些操作会影响隐式强制转换是一种技巧,也是一个很好的了解,但它根本不可读。沟通就是一切。
2021-03-20 07:13:43
我认为准确地了解这些事情很重要,这样您才能在阅读代码时知道发生了什么。许多 JavaScript 是简洁的,因为它是作为源代码传输的,而小代码意味着服务器成本的降低。
2021-03-26 07:13:43

你可以这样做:

// step 1 
var one = "1" + "2" + "3"; // string value "123"

// step 2
var two = parseInt(one); // integer value 123

// step 3
var three = 123 + 100; // integer value 223

// step 4
var four = three.toString(); // string value "223"
更出乎意料的是,以 开头0然后包含8or 的值9将失败,导致返回 0。例如,parseInt('034') = 28, 和parseInt('09') = 0
2021-04-01 07:13:43
最佳实践是将基数参数添加到 parseInt() 函数。因此, parseInt(one, 10) 确保您投入的任何内容都不会被错误转换。
2021-04-07 07:13:43
同意。否则,以 开头的值0将被视为八进制 (base-8)数字。
2021-04-09 07:13:43