Javascript 内置对象——String对象

标签: String对象  简单类型  复杂类型

基本包装类型
为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和Boolean。
基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

//1.生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
//2.复制给我们声明的字符变量
srt = temp;
//3.销毁临时变量
temp = null;

字符串的不可变
指的是里面的值为不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间

var str = 'abc';
str = 'hello';
//当重新给str赋值的时候,常量'abc'不会被修改,依然存在内存中
//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
//由于字符串的不可变,在大量拼接祖父穿的时候会有效率问题
var str = '';
for (var i = 0; i < 999999;i++){
	str +=i;
}
console.log(str);
//这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间

根据字符返回位置
字符串所有的方法都不会修改字符串本身(因为字符串是不可变的),操作完成会返回一个新的字符串

方法名 说明
indexOf(‘要查找的字符,开始的位置’) 返回指定内容在原字符串中的位置,开始的位置是index索引号,如果找不到就返回-1
lastindexOf() 从后往前找,只找第一个匹配的

根据位置返回字符

方法名 说明 使用
charAt(index) 返回指定位置的字符(index字符串的索引号) str.charAt(0)
charCodeAt(index) 获取指定位置处字符的ASCLL码(index索引号) str.charCodeAt(0)
str[index] 获取指定位置处字符 HTML5,IE8+支持 和 charAt()等效

字符串操作方法

方法名 说明
concat(str1,str2,str3…) concat() 方法用于连接两个或多个字符串。拼接字符串,等效于+,但+更常用
substr(start,length) 从start位置开始(索引号),length 取的个数
slice(start,end) 从start位置开始,截取到end位置,取不到end(两个都是索引号)
substring(start,end) 从start位置开始,截取到end位置,取不到end,基本和 slice 相同 但是不接受负值

简单类型与复杂类型
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型

值类型:简单数据类型/基本数据类型,在存储时变量中存储的时值本身,因此叫做值类型。如:string、number、boolean、andefined和null
引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型通过 new 关键字创建的对象(系统对象、自定义对象)。如:Object、Array、Date等

堆和栈
堆栈空间分配区别
1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈;简单数据类型存放到栈里
2、堆(操作系统):存储复杂类型(对象),一般由自己分配释放,若不释放,由垃圾回收机制回收;复杂数据类型存放到堆里

注意:Javascript中没有堆栈的概念,是通过堆栈的方式,可以更容易理解代码的一些执行方式,便于学习其他语言

在这里插入图片描述
复杂类型的内存分配
引用类型(复杂数据类型):通过 new 关键字创建的对象(系统对象、自定义对象)。如:Object、Array、Date等。
引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中。
在这里插入图片描述

简单类型传参
函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部变量。

function fn(a){
	a++;
	console.log(a);
}
var x = 10;
fn(x);
console.log(x);

在这里插入图片描述

复杂类型传参
函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

function Person (name){
	this.name = name;
}
function f1(x){
	console.log(x.name);
	x.name = 'zxy';
	console.log(x.name);
}
var p = new Person('yxz');
console.log(p.name);
f1(p);
console.log(p.name);

在这里插入图片描述

原文链接:加载失败,请重新获取