码迷,mamicode.com
首页 > 其他好文 > 详细

可能你不知道的字符串中的一个小坑!!!

时间:2017-09-27 23:13:31      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:indexof   dex   ack   lin   部分   data   去重   技术   data-   

简单的记录一个小问题,一直居然都没怎么注意,心底对自己深深的说了一句:“你真菜”!

平时日常我们接触到的数组去重太常见了。然后对于字符串的去重,也是可能用的IndexOf。或者转成数组去查重,然后再转换回来!

在尝试用其他方法的时候遇见一个小问题,在此记录下来与大家分析!

        var str = ‘521213756406‘;
        for(var i = 0; i < str.length-1;i++){
            for(var j = i+1;j < str.length; j++){
                if(str[i] == str[j]){
                    str[j] = ‘‘;
                    j--;
                }
            }
        }            

然而并不能,字符串纹丝不动,还是老样子,关键点在于str[j] = ‘‘并不能生效。

也不多BB,直接一句话说完先:字符串常量是放在静态存储区的,这部分内容是不能修改的。

再最后做一波扩展吧,字符串常量是在堆上的,数组常量是放在栈上的。

字符串数据被存储到堆,然后把字符串的引用地址存储在字符串变量中。同时为了避免错误操作,js解释器强制约定字符串在堆存储的数据是不可变的。相当于设置字符串在堆区存储的数据是只读的。

1,栈区(stack):这块区域由编译器分配与释放内存空间,一般存储函数的参数值与局部变量值。类似于数据结构中的栈。

2, 堆区(heap):这块区域由程序员自己分配与释放,其余数据结构中的堆是两码事,分配方式类似于链表。

最后加一波感言吧,在日常的工作中,大家往往比较关注的是工作效率(没办法,老板要你出活呀!),我们应该抽空多复习下基础的知识,温故而知新嘛!这样才能在技术道路上走的更远,而如上的一些小细节可能往往比较容易被忽略和遗忘。

希望大家能共勉,一起进步。同意的老铁关注点赞啥的都是可以有的骚操作呀(QAQ)!欢迎交流,指正!!!

可能你不知道的字符串中的一个小坑!!!

标签:indexof   dex   ack   lin   部分   data   去重   技术   data-   

原文地址:http://www.cnblogs.com/hjj2ldq/p/7604403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!