string的包装类型
字符串有长度属性,但是又说只有对象才有属性和方法。
实际上:
在使用字符串的属性或方法时,JS会给我们创建一个值相同的基本包装类型对象,再调用这个对象的属性和方法,这个对象使用完毕后会立刻删除掉。
var str1 = "abc";
var str2 = new String("abc");//string的包装类型
//简单数据类型无法绑定属性和方法。
str1.aaa = 111;
str2.aaa = 222;
console.log(str1.aaa);//undefiend
console.log(str2.aaa);//222
console.log(str1.length);
console.log(str1.indexOf("b"));//隐式转换,调用属性和方法的时候,
// 简单类型转换成了包装类型,使用完毕方法或者属性后又返回原来的简单数据类型。
str1和str2的本质:

基本包装类型
基本包装类型:Boolean、Number、String
什么是包装对象
当使用原始类型的值(string、number、boolean),在调用对应属性和方法的时候,内部会自动转成对应的对象。隐式创建的这个对象,就成为包装对象。
包装对象的特点
隐式创建对象后,可以调用对应的属性和方法,使用后,立马销毁,所以不能给原始类型的值添加属性和方法
引用类型和基本包装类型的主要区别就是对象的生存期
- 使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。
- 而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。
给索引查字符:charAt()
- str.charAt(索引值) 可以根据索引取出str中的某一个字符
- str[索引] html5添加的,ie9以上支持
charCodeAt(索引) 返回是这个字符的ASCII码,不常用
//Unicode编码: 97-65-48 == aA0 var str = "0Aabcdefg"; console.log(str.charAt(2));//s 给索引查字符 console.log(str[2]);//s 给索引查字符(h5新增,IE9以上支持) console.log(str.charCodeAt(0));//给索引查字符所对应的Unicode编码
给字符查索引indexOf()
- str.indexOf();
str.indexLastOf();从字符串尾部开始寻找
//给字符查索引,查不到返回值为-1; //如果字符特别长,包含完整的字符那么就是首字母的索引值。如果不全,返回值为-1; var str = "abcfdef"; console.log(str.indexOf("b"));//1 console.log(str.lastIndexOf("f"));//6 console.log(str.lastIndexOf("x"));//-1 console.log(str.lastIndexOf("abd"));//-1
字符串的连接:concat()
var str1 = "123";
var str2 = "abc";
var str3 = str1.concat(str2);//123abc
字符串切割成数组 split()
1:2:3:4:5".split(":"); // 返回 ["1","2","3","4","5"]
"|a|b|c|".split("|"); // 返回 ["", "a", "b", "c", ""]
"hello".split(""); // 返回 ["h","e","l","l","o"]
"hello".split("", 3); // 返回 ["h","e","l"]
String.split()执行的操作与Array.join()执行的操作相反。
字符串的截取:slice/substr/substring
1、string.slice(start, end)
slice:四种用法;两个参数都是索引值
var str3 = "123abc";
//单个参数
console.log(str3.slice(3));//abc
//两个参数
console.log(str3.slice(2,4));//3a
//负数
console.log(str3.slice(-4));//3abc
//前大后小:返回值为"";
console.log(str3.slice(3,0));
2、string.substr(start, length)
//substr(): (索引值,长度);
//一个参数
console.log(str3.substr(3));//截取到最后
//两个参数
console.log(str3.substr(2,4));//截取的个数
//负数
console.log(str3.substr(-4));//截取后几个
//前大后小不研究:因为他是按照个数截取
3、substring:类比于slice方法。
//单个参数
console.log(str3.substring(3));
//两个参数
console.log(str3.substring(2,4));
//负数
console.log(str3.substring(-4));//获取所有
//前大后小:返回值为“”;
console.log(str3.substring(3,0));//智能调换
字符串的编码和解码
var url = "http://www.itcast.cn?username='nihao'&password=123123";
//编码和解码
console.log(url);
var str1 = encodeURIComponent(url);
console.log(str1);//BOM的一个方法;
var str2 = decodeURIComponent(str1);
console.log(str2);
有关正则表达式的3个方法:search/replace/trim
1、replace(); 根据正则替换内容
var str = "Today ,today ,today ";
//如果不用正则表达式,只把第一个today换成tomorrow
console.log(str.replace("today","tomorrow"));//Today ,tomorrow ,today
//g是指全局替换(global)
console.log(str.replace(/today/g,"tomorrow"));//Today ,tomorrow ,tomorrow
//i是指忽略大小写
console.log(str.replace(/today/ig,"tomorrow"));//tomorrow ,tomorrow ,tomorrow
console.log("nihao2016".replace(/[\d]/g,""));
2、 trim(); 去除前后的空格
var str =" haha haha ";
console.log(str.trim());//haha haha
利用replace(),也可以实现trim()方法的功能:
//思路:找到前后的空白,然后用replace函数,把空白替换为"";
var str =" haha haha ";
function trimStr(string) {
return string.replace(/(^\s+)|(\s+$)/g, "");
}
console.log(trimStr(str));//haha haha
3、search(); 给字符查索引
var str = "abcdefg";
console.log(str.search(/abc/));
字符串的特殊方法
localeCompare():包含
//localeCompare:包含
// s1 > s2 返回正数,一般是1(包含)
// s1 == s2 返回0(相等)
// s1 < s2 返回负数,一般是-1(不包含)
var str = "abcdefg";
console.log(str.localeCompare("abc"));//1
console.log(str.localeCompare("abcdefg"));//0
console.log(str.localeCompare("xyz"));//-1
console.log(str.localeCompare("abcdefgakdslfjhadkg"));//-1
console.log(str.localeCompare("ac"));//-1
根据Unicode编码转换字符串
var str = String.fromCharCode(48,65,97);
console.log(str);
基本包装类型补充:
基本包装类型,boolean类型和number数值类型的基本包装对象我们一般不使用,因为是对象形式,会对使用造成影响。
比如boolean,如果是对象,在判断布尔的时候, 永远是true。