学习来源:https://www.bilibili.com/video/BV1HJ41147DG
// 下面代码有什么问题?
var str = 'andy';
console.log(str.length);
结果是:4
// 1、 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2、赋值给我们声明的字符变量
str = temp;
// 3、销毁临时变量
temp = null;
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
由于字符串的不可变,在大量拼接字符串的时候会有效率问题
// 字符串的不可变性
var str = 'andy';
console.log(str);
// 重新给str赋值,str之前保存的字符串"andy"不会被修改,依然在内存中。
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
str = 'red';
console.log(str);
// 因为我们字符串的不可变,所以不要大量的拼接字符串
var str = '1';
for (var i = 1; i <= 1000000000; i++) {
str += i;
}
console.log(str); // 这个结果需要大量时间来显示,因为需要不断开辟新的空间
字符串所有的方法,都不会修改字符串本身(字符串的不可变性),操作完成会返回一个新的字符串。
字符串通过基本包装类型可以调用部分方法来操作字符串,以下是返回指定字符的位置的方法:
此方法在数组对象中的应用:https://blog.csdn.net/qq_45645902/article/details/105464408
注释
此两个方法区分大小写
注释
'hello world'.indexOf('') // 返回 0
'hello world'.indexOf('', 0) // 返回 0
'hello world'.indexOf('', 3) // 返回 3
'hello world'.indexOf('', 8) // 返回 8
另外,如果 fromIndex 值大于等于字符串的长度,将会直接返回字符串的长度(str.length):
'hello world'.indexOf('', 11) // 返回 11
'hello world'.indexOf('', 13) // 返回 11
'hello world'.indexOf('', 22) // 返回 11
从前面一个例子可以看出,被查找的值是空值时,Javascript将直接返回指定的索引值。从后面一个例子可以看出,被查找的值是空值时,Javascript将直接返回字符串的长度。
var str= ['blue', 'red', 'green', 'blue'];
console.log(str.lastIndexOf('blue')); // 3
console.log(str.lastIndexOf('yellow')); // -1
注释
searchValue:必须。要查找的字符串值。如果searchValue是空字符串,则返回fromIndex。
fromIndex:可选。待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找。fromIndex默认值是 +Infinity。如果 fromIndex >= str.length ,则会搜索整个字符串。如果 fromIndex < 0 ,则等同于 fromIndex == 0。
案例
思路:
var str = 'oabcoefoxyozzopp';
var flag = str.indexOf('o');
var count = 0;
for (var i = 0; i < str.length; i++) {
if (flag != -1) {
count++;
console.log(flag);
flag = str.indexOf('o', flag + 1)
}
}
console.log('o 一共出现的次数是: ' + count + '次');
2、[‘red’, ‘blue’, ‘red’, ‘green’, ‘pink’,‘red’], 求 red 出现的位置和次数
var str = ['red', 'blue', 'red', 'green', 'pink','red'];
var flag = str.indexOf('red');
var count = 0;
for (var i = 0; i < str.length; i++) {
if (flag != -1) {
count++;
console.log(flag);
flag = str.indexOf('red', flag + 1)
}
}
console.log('red 一共出现的次数是: ' + count + '次');
字符串通过基本包装类型可以调用部分方法来操作字符串,以下是根据位置返回指定位置上的字符:
var s = {};
// 遍历字符串,存储字符和出现次数给对象
function count(str) {
for (var i = 0; i < str.length; i++) {
if (s[str.charAt(i)]) { // s[arr.charAt(i)] 得到的是属性值
s[str.charAt(i)]++;
} else {
s[str.charAt(i)] = 1;
}
}
}
count('oabcoefoxyozzopp');
console.log(s);
// 遍历对象
var max = 0;
var ch = '';
for (var k in s) {
// k得到是属性名,s[k]得到的是属性值
if (s[k] > max) {
max = s[k];
ch = k;
}
}
console.log(max);
console.log('出现次数最多的字符为' + ch);
字符串通过基本包装类型可以调用部分方法来操作字符串,以下是部分操作方法:
replace() 方法用于在字符串中用一些字符替换另一些字符。
语法
stringObject.replace(regexp/substr,replacement)
注释
示例
var str = 'andyandy';
console.log(str.replace('a', 'b')); // bndyandy
// 有一个字符串 'abcoefoxyozzopp' 要求把里面所有的 o 替换为 *
var str1 = 'abcoefoxyozzopp';
while (str1.indexOf('o') !== -1) { //返回o的位置为0,将此o改为*,再次查找的字符o,返回4,将次位置的o改为*,……,如此下去,直到 indexOf() 返回-1
str1 = str1.replace('o', '*');
}
console.log(str1); // *abc*ef*xy*zz*pp
split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。其使用格式如下:
字符串.split("分割字符")
注释
将字符串中所有字符转换为大写
语法
stringObject.toUpperCase() // 无参
将字符串中所有字符转换为大写
语法
stringObject.toLowerCase() // 无参
字符串:“abaasdffggghhjjkkgfddsssss3444343”,问题如下:
1、 字符串的长度
2、 取出指定位置的字符,如:0,3,5,9等
3、 查找指定字符是否在以上字符串中存在,如:i,c ,b等
4、 替换指定的字符,如:g替换为22,ss替换为b等操作方法
5、 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6、 找出以上字符串中出现次数最多的字符和出现的次数
7、 遍历字符串,并将遍历出的字符两头添加符号“@”
var str = 'abaasdffggghhjjkkgfddsssss3444343';
function len(str) {
return str.length;
}
console.log(len(str));
function place(str) {
return str.charAt(6);
}
console.log(place(str));
function TrueOrFalse(str) {
if (str.indexOf('i')) {
return '存在该字符';
} else {
return '不存在该字符';
}
}
console.log(TrueOrFalse(str));
function rep(str) {
while (str.indexOf('g') != -1) {
str = str.replace('g', '22');
}
return str;
}
console.log(rep(str));
function cut(str) {
return str.slice(1, 5);
}
console.log(cut(str));
var s = {};
function MaxAndCount(str) {
for (var i = 0; i < str.length; i++) {
if (s[str.charAt(i)]) {
s[str.charAt(i)]++;
} else {
s[str.charAt(i)] = 1;
}
}
}
MaxAndCount(str);
var max = 0;
var ch = '';
for (var k in s) {
if (s[k] > max) {
max = s[k];
ch = k;
}
}
console.log('出现次数最多的字符为:' + ch + ' 次数为:' + max);
var strArr = str.split("")
var newStr = '';
for (var i = 0; i < strArr.length; i++) {
var newChar = "@" + strArr[i] + "@;";
newStr += newChar;
}
console.log(newStr);