zoukankan      html  css  js  c++  java
  • JavaScript之倔强的字符串

    关于倔强的JavaScript字符串:不可以被修改

    我们是字符串
    我们的口号是:你可以消灭我,但是你不能改变我

    JavaScript字符串是不可改变的,当真是这样的吗?

    让我们来试验一下。

    var name = "Coder-Monkey"
    console.log(name[0])     // C
    console.log(name[11])    // y
    

    以上结果表明,字符串可以通过下标来访问。

    试着修改一下:

    name[0] = "X"
    name[11] = "X"
    console.log(name)       // Coder-Monkey
    

    果然有骨气,改不动。

    • JS中,字符串作为固定的常量值存储在堆
    • 字符串的值不可通过下标来改变

    不能改变这一点,似乎超出很多人的想像,平时编码时的经验表明可以改变啊。。

    其实,那不是改变,而是重新赋值而已,指向了另一个字符串所在的内存地址。

    就像这样,是可以的:

    name = "CoderMonkie"
    console.log(name)       // CoderMonkie
    

    那么,当需要“修改”原有字符串,而不是重新赋值一个不相干的值时怎么办呢?

    看使用场景,如果明确修改前修改后的内容,可以用字符串的replace方法替换。

    如果像开始的示例中那样,只修改指定位置,那么我们可以绕一个圈子来模拟修改操作。

    • 通过字符串的split('')方法将字符串转为数组
    • 通过数组下标修改数组
    • 通过数组的join('')方法再将数组连接成字符串

    以上,完成。

    Talk is cheep, so show you the code.

    var arr = name.split('')
    arr[0] = 'X'
    arr[11] = 'X'
    name = arr.join('')
    
    console.log(name)
    // XoderMonkiX
    
  • 相关阅读:
    避免数据脏读
    OGG配置文件中参数化的运用
    GoldenGate基于中间队列文件的初始化
    一次linux中毒,挖矿病毒
    goldengate新版本中查看日志读取点
    dlopen用法参数flag介绍
    gdb调试带参数和调试core
    在现有的git服务器上面创建新的repo
    Play Old Diablo 2 on macOS Catalina
    Odoo中的Environment对象
  • 原文地址:https://www.cnblogs.com/CoderMonkie/p/cannot-modify-string-in-js.html
Copyright © 2011-2022 走看看