字符串和值类型、引用类型

目录

一、字符串

1、字符串的创建方式:

2、字符串默认的属性

3、方法

二、值类型和引用类型

1、值类型

2、引用类型

3、函数的参数是对象


一、字符串

1、字符串的创建方式:

(1)直接创建

var 变量名 = "字符串"

例如:var str = "一二三四五"

(2)通过String对象创建

var str = new String('apple');	// 创建字符串对象
console.log(str);			// 输出结果:String {"apple"}
console.log(str.length);		// 获取字符串长度,输出结果:5

2、字符串默认的属性

length,用来记录字符串的长度

3、方法

字符串对象提供了用于检索元素的属性和方法,字符串对象的常用属性和方法

(1)根据字符返回位置

indexOf(value):返回参数value在字符串中首次出现的位置。若返回-1表示未找到value

lastIndexOf(value):返回参数value在字符串中最后出现的位置

indexOfsearchValue

获取searchValue在字符串中首次出现的位置

lastIndexOfsearchValue)

获取searchValue在字符串中最后出现的位置

var str = 'HelloWorld';
str.indexOf('o');	    // 获取“o”在字符串中首次出现的位置,返回结果:4
str.lastIndexOf('o');  // 获取“o”在字符串中最后出现的位置,返回结果:6
//要求在一组字符串中,找到所有指定元素出现的位置以及次数。
//字符串为 ' Hello World, Hello JavaScript '。

var str = 'Hello World, Hello JavaScript';
var index = str.indexOf('o');
var num = 0;
while (index != -1) {
  console.log(index);		  // 依次输出:4、7、17
  index = str.indexOf('o', index + 1);
  num++;
}
console.log('o出现的次数是:' + num);  // o出现的次数是:3

(2)根据位置返回字符

charAt(index):返回index位置上的字符

charCodeAt(index):返回index位置上的字符的ASCII码值

048
a97
A65
空格32

 str[index]:H5中新增的方法.把字符串看作是数组

var o = {} //表明变量o是一个对象.对象保存数据的格式是
{属性名}
 str = 'Apple'
o={
   'A':1,
   'P':2,
   'l':1,
   'e':1
}

charAt(index)

获取index位置的字符,位置从0开始计算

charCodeAt(index)

获取index位置的字符的ASCII

str[index]

获取指定位置处的字符(HTML5新增)

var str = 'HelloWorld';
var str = 'Apple';
console.log(str.charAt(3));	          // 输出结果:1
console.log(str.charCodeAt(0));   // 输出结果:65(字符A的ASCII码为65)
console.log(str[0]);	          // 输出结果:A

//使用charAt()方法通过程序来统计字符串中出现最多的字符和次数。

var str = 'Apple';
// 第1步,统计每个字符的出现次数
var o = {};
for (var i = 0; i < str.length; i++) {
  var chars = str.charAt(i);	// 利用chars保存字符串中的每一个字符
  if (o[chars]) {	               // 利用对象的属性来方便查找元素
    o[chars]++;
  } else {  o[chars] = 1; }
}
console.log(o);		// 输出结果:{A: 1, p: 2, l: 1, e: 1}

// 第2步, 统计出现最多的字符
var max = 0;		// 保存出现次数最大值
var ch = '';		// 保存出现次数最多的字符
for (var k in o) {
  if (o[k] > max) {
    max = o[k];
    ch = k;
  }
}
// 输出结果:“出现最多的字符是:p,共出现了2次”
console.log('出现最多的字符是:' + ch + ',共出现了' + max + '次');

 (3)字符串操作方法

字符串对象提供了一些用于截取字符串、连接字符串、替换字符串的属性和方法。字符串对象的常用属性和方法

concat(str1,str2,...)

连接多个字符串

slice(start,[end])

截取从start位置到end位置之间的一个子字符串

substring(start,[end])

截取从start位置到end位置之间的一个子字符串,基本和slice相同,但是不接收负值

substr(start,[length])

截取从start位置开始到length长度的子字符串

toLowerCase()

获取字符串的小写形式

toUpperCase()

获取字符串的大写形式

split(seq,[,limit])

使用separator分隔符将字符串分隔成数组,limit用于限制数量

replace(str1,str2)用str2替换str1

var str = 'HelloWorld';
str.concat('!');  // 在字符串末尾拼接字符,结果:HelloWorld!
str.slice(1, 3);   // 截取从位置1开始包括到位置3的范围内的内容,结果:el
str.substring(5);      // 截取从位置5开始到最后的内容,结果:World
str.substring(5, 7);  // 截取从位置5开始到位置7范围内的内容,结果:Wo
str.substr(5);           // 截取从位置5开始到字符串结尾的内容,结果:World
str.substring(5, 7);  // 截取从位置5开始到位置7范围内的内容,结果:Wo
str.toLowerCase();  // 将字符串转换为小写,结果:helloworld
str.toUpperCase();  // 将字符串转换为大写,结果:HELLOWORLD
str.split('l');	  // 使用“l”切割字符串,结果:["He", "", "oWor", "d"]
str.split('l', 3);	  // 限制最多切割3次,结果:["He", "", "oWor"]
str.replace('World', '!'); // 替换字符串,结果:"Hello!"

二、值类型和引用类型

1、值类型

简单的数据类型(String、Number、Boolean、undefined、null)又称值类型

2、引用类型

复杂数据类型(对象)又称为引用类型。引用类型的特点是,变量中保存的仅仅是一个引用的地址,当对变量进行赋值时,并不是将对象复制了一份,而是将两个变量指向了同一个对象的引用

var student = {
		       name: '小王',
		       gender: '男',
		       age: 12
		    };
var s2 = student; //将对象的地址赋给s2
student = {id:1234,address:'杭州'}
//代码中的obj1和obj2指向了同一个对象

// 创建一个对象,并通过变量obj1保存对象的引用
var obj1 = { name: '小明', age: 18 };
// 此时并没有复制对象,而是obj2和obj1两个变量引用了同一个对象
var obj2 = obj1;
// 比较两个变量是否引用同一个对象
console.log(obj2 === obj1);  // 输出结果:true
// 通过obj2修改对象的属性
obj2.name = '小红';
// 通过obj1访问对象的name属性
console.log(obj1.name);	    // 输出结果:小红

obj1和obj2两个变量引用了同一个对象,此时,无论是使用obj1操作对象还是使用obj2操作对象,实际操作的都是同一个对象。

3、函数的参数是对象

当obj1和obj2两个变量指向了同一个对象后,如果给其中一个变量(如obj1)重新赋值为其他对象,或者重新赋值为其他值,则obj1将不再引用原来的对象,但obj2仍然在引用原来的对象。

var obj1 = { name: '小明', age: 18 };
var obj2 = obj1;
// obj1指向了一个新创建的对象
obj1 = { name: '小红', age: 17 };
// obj2仍然指向原来的对象
console.log(obj2.name);		// 输出结果:小明

注意:当一个对象只被一个变量引用的时候,如果这个变量又被重新赋值,则该对象就会变成没有任何变量引用的情况,这时候就会由JavaScript的垃圾回收机制自动释放。

js的垃圾回收机制垃圾回收机制https://blog.csdn.net/Han_Zhou_Z/article/details/121386812?spm=1001.2014.3001.5502icon-default.png?t=LA92https://blog.csdn.net/Han_Zhou_Z/article/details/121386812?spm=1001.2014.3001.5502

若在函数体中修改了对象的属性值,则在函数外部访问该对象时,得到的是修改后的对象的值。

function change(obj) {
  obj.name = '小红';	// 在函数内修改了对象的属性
}
var stu = { name: '小明', age: 18 };
change(stu);
console.log(stu.name);	// 输出结果:小红

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值