简单的记录一个小问题,一直居然都没怎么注意,心底对自己深深的说了一句:“你真菜”!
平时日常我们接触到的数组去重太常见了。然后对于字符串的去重,也是可能用的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)!欢迎交流,指正!!!
原文:http://www.cnblogs.com/hjj2ldq/p/7604403.html