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

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

平时日常我们接触到的数组去重太常见了。然后对于字符串的去重,也是可能用的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)!欢迎交流,指正!!!

posted @ 2017-09-27 22:48  萝卜爱吃青菜  阅读(211)  评论(0编辑  收藏  举报