这是第一部分的最后一篇啦,不过内容真的又多又杂,必须复习一遍才行.
字符串对象
学习完Math和数组对象,现在学习字符串对象,学习完以后要复习了,感觉好久没复习.
我们之前使用过str.length,但是复杂数据类型才有属性和方法,为什么这个简单数据类型也有length属性呢?
这是因为JS将简单数据类型包装成了复杂数据类型.
基本包装类型
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String, Number,和Boolean.
基本包装类型就是把简单的数据类型包装成复杂的数据类型,这样基本数据类型就有了属性和方法.
相当于是做了以下的步骤:
原来的代码:
var str = 'andy';
console.log(str.length);
1.将简单的数据类型包装成复杂数据类型
var temp = new String('xxx');
2.把临时变量的值给str
str = temp;
3.销毁这个临时变量
temp = null;
字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实只是地址变了,内存中开辟了新的一个内存空间,也就是说,一开始我们var str = 'pink', 然后我们又 var str = 'red', 虽然看似值改变了,但是'pink'这个值还是存在的,所以我们不要大量的对字符串进行赋值,也不要大量的进行拼接字符串,否则会占很多的内存资源.
根据字符返回位置,和之前数组的方法是类似的.
indexOf( )这个函数其实不止一个参数,str.indexOf('要查找的字符', [起始的位置])
比如第二个log就是输出从索引号3开始查找的'春'字出现的位置.
做一个案例:
我随意打了一个字符串,试了一下,这是我的方法:
下面是老师的方法:
我恨while循环...刚刚一个没注意又给我电脑搞死机了,感觉要炸了...
根据位置返回字符
刚好和上面是相反的:
1.charAt(index):
2.chatCodeAt(index): 返回相应索引号的字符ASCII值 目的:判断用户按下了哪个键
3.str[ ] : 这是H5新增的方法,最方便,但是有兼容性的问题.
小案例:
想了半天也没想出来...唉,emo了好久...
老师的做法:
实在是想不到,唉.
字符串操作方法
替换字符 replace( )
但是注意,他只会替换第一个字符.
那么怎么将字符串中的所有想替换的元素都换掉呢?
我们可以遍历数组:
将字符串转换成数组 split('分隔符')
分割符指的是分割这个字符串的依据,用的','就会按照','将字符串分开,组成数组.
课下查询
简单数据类型和复杂数据类型
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型.
堆栈空间分配区别
1.栈(操作系统): 由操作系统自动分配释放存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈;简单数据类型存放在栈里面.
2.堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放,如果不释放,由垃圾回收机制回收.复杂数据类型存放到堆里面,真正的对象实例在堆里.
注意:JavaScript中没有堆栈的概念,通过堆栈的方式,可以让我们更容易理解代码的一些执行方式,便于将来学习其他语言.
简单类型传参
函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部变量.
复杂类型传参
函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象.
第一部分结束!现在要去复习了