关于倔强的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

JavaScript之倔强的字符串的更多相关文章

  1. JavaScript框架设计(四) 字符串选择器(选择器模块结束)

    JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...

  2. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  3. JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。

    在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...

  4. Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  5. JS面试Q&A(续):Javascript数组排序, 默认是字符串Unicode排序, 不适合数字

    Q:下面代码段的执行后data里面的数据是什么?为什么? var data= [40,1,5,200] data.sort(); A: data的内容是[1, 200, 40, 5] 因为,Javas ...

  6. 转:javascript时间戳和日期字符串相互转换

    转:javascript时间戳和日期字符串相互转换 <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...

  7. JavaScript 数组方法处理字符串 prototype

    js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...

  8. Javascript实现多行字符串

    打开百度首页,进入控制台的时候,我们在console控制台总可以看到一段文字: 这些文字是如何显示在控制台的呢?? Javascript中的函数被看作是一个对象拥有自己的方法,其中一个小方法fn.to ...

  9. javascript创建多行字符串的方法(转)

    JS里并没有标准的多行字符串的表示方法,但是在用模板的时候,为了保证模板的可阅读性,我们又不可避免的使用多行字符串,所以出现了各种搞法,这里以一段jade的模板作为示例,简单总结和对比一下. 一.字符 ...

随机推荐

  1. C++基本知识总结

    从第一个CPP开始写起: "hello,world" #include<iostream> using namespace std;//使用所有命名空间 int mai ...

  2. HDU-1857 畅通工程再续

    畅通工程再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定 ...

  3. js 箭头函数不适用的场景

    箭头函数虽然方便但也不是每个地方都适用, 箭头函数在开发中可以十分方便的干预 this的指向,在一些情况下,是不需要对this的指向进行干预的,也就不适用箭头函数 1.构造函数的原型方法上 例如:Pe ...

  4. CTF-Reverse-[GXYCTF2019]luck_guy

    CTF-Reverse-[GXYCTF2019]luck_guy 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与 ...

  5. 用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1)

    用最基本的遍历来实现判断字符串 a 是否被包含在字符串 b 中,并返回第一次出现的位置(找不到返回 -1) 例子: a='12';b='1234567'; // 返回 0 a='47';b='1234 ...

  6. 介绍一个船新的 PHP SDK + Runtime: PeachPie

    前言 这几天想基于 .NET Core 搞一个自己的博客网站,于是在网上搜刮各种博客引擎,找到了这些候选:Blogifier.Miniblog 以及 edi 写的 Moonglate. Blogifi ...

  7. 设计模式之GOF23原型模式02

    利用序列化和反序列化完成深复制 ByteArrayOutputStream bos=new ByteArrayOutputStream();  ObjectOutputStream oos=new O ...

  8. Istio的流量管理(实操一)(istio 系列三)

    Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...

  9. 给bootstrap右边的菜单加上右键关闭

    <ul class="rightmenu"> <li data-type="closethis">关闭当前</li> < ...

  10. vue项目开发中遇到的问题总结

    (转自)https://www.cnblogs.com/zifayin/p/8312677.html 1.路由变化页面数据不刷新问题 这种情况一般出现在vue-router的history模式下,初次 ...