------JavaScript中对于String对象有很多原生的属性和方法,非常的方便和实用,例如:length属性获取字符串的总长度;IndexOf()查找指定字符,返回位置索引等。
------我们还有一些方法是会改变我们的字符串模样,返回一个新的字符串,那么他们的一系列操作是否会改变原有字符串的样式呢?
------让我们一起来看看吧!
- 首先,测试一下字符串的截取方法slice、substr和substring
var str = "这里是一个字符串";
var newStr = str.slice(5),
newStr2 = str.substring(3,1),
newStr3 = str.substr(1,3);
console.log("原字符串---",str);
console.log("slice截取的字符串---",newStr);
console.log("substring截取的字符串---",newStr2);
console.log("substr截取的字符串---",newStr3);
输出结果
原字符串— 这里是一个字符串
slice截取的字符串— 字符串
substring截取的字符串— 里是
substr截取的字符串— 里是一
由此可以看出,字符串的截取方法并不会修改原有字符串,而只是返回了一个新字符串。
- 然后,再看一下replace方法
var str = "这里是一个字符串";
var newStr = str.replace("字符串","replace");
console.log("原字符串---",str);
console.log("replace修改后的字符串---",newStr);
输出结果
原字符串— 这里是一个字符串
replace修改后的字符串— 这里是一个replace
由此可以看出,字符串的replace方法并不会修改原有字符串,而只是返回了一个修改后的新字符串。
- 前面的两种方法,都不会对原有字符串造成影响,那么toUpperCase和toLowerCase呢
var demo = "Hello,world";
var NEW = demo.toUpperCase();
var new = demo.toLowerCase();
console.log(NEW); // 输出:HELLO,WORLD
console.log(new); // 输出:hello,world
console.log(demo);// 输出:Hello,world
可以看到,使用toUpperCase()方法后," hello,world "变为 " HELLO,WORLD "。假设如果会改变原字符串的话,此时demo应该全都变为大写,但是依然是原来最初定义的字符串,这足可以说明不会影响到原字符串。同理可得,toLowerCase()也不会改变原有字符串。
- 最后再来看一下ES6中新增的一些方法repeat,padStart和padEnd
var str = "s";
var newStr = str.repeat(10);
console.log("原字符串---",str);
console.log("repeat修改后的字符串---",newStr);
输出结果,并未改变原字符串
原字符串— s
repeat修改后的字符串— ssssssssss
var str = "s";
var newStr = str.padStart(3,"pa");
console.log("原字符串---",str);
console.log("padStart修改后的字符串---",newStr);
输出结果
原字符串— s
padStart修改后的字符串— pas
总结
由上面的小案例我们可以看出,字符串String的内置方法
- slice()、substr()和substring()
- replace()
- toUpperCase()和toLowerCase()
- ES6中新增的一些方法repeat(),padStart()和padEnd()
都不会修改原有字符串