一 : 创建方法
两种创建方法,第一种是字面量写法,是基本类型
var box = 'jewel';
box.name = "jewel";
box.age = function(){
return 100;
};
alert(box); // jewel
alert(typeof box); // string
alert(box.substring(2));// wel
alert(box.name); //undefined
alert(box.age()); //出错
如何证明string是基本类型?基本类型无法给自己创建属性和方法(比如上述的name属性和age方法),但是可以调用系统内置的属性和方法(上述substring()方法)
参照《JavaScript基本包装类型》查看基本类型无法创建自定义属性和方法的原因
第二种写法是new运算符,创建的是引用类型
此方法的自定义属性和方法都有效
var box = new String('jewel');
box.name = "wang";
box.age = function(){
return 100;
};
alert(box); // jewel
alert(typeof box); // object
alert(box.substring(2)); // wel
alert(box.name); // wang
alert(box.age()); // 100
不提倡使用这种方法,这样会分不清是基本类型还是引用类型
字符串的length属性表示字符串中包含多个字符
var box = "Mr.right";
alert(box.length); //字符串长度属性,返回8
二 : 字符方法
三个访问字符串中特定 字符的方法: charAt()
和charCodeAt()
和stringValue[]
1. charAt(位置参数)以单个字符的形式返回给定位置的那个字符
var box = "Mr.right";
alert(box.charAt(1)); //返回指定字符串的下标对应的值,r
2. charCodeAt(位置参数)返回的不是字符而是字符的编码
var box = "Mr.right";
//alert(box.charCodeAt(0)); //返回指定下标的值的ASCII码, 77
3. stringValue[位置参数]返回字符串中特定的字符,任何字符串变量[下标位置]
var stringValue = "Mr.right";
console.log(stringValue[1]); // r
var box = 'hello';
console.log(box[2]); // l
三 : 字符串操作方法
1. concat()将一个或者多个字符拼接起来,返回拼接得到的新的字符串。数组也有此方法
var box = 'Bob hello block'
console.log(box.concat(' is',' a',' boy')); // Bob hello block is a boy
concat()可以接受任意多个参数,我们可以通过它拼接任意多个字符串
但在实际应用中,+拼接字符串比concat()用的多。
不会改变原来的字符串
2. slice(), substr(), substring()
slice()参数:开始位置,[结束位置],不包括结束位置
substr()参数:开始位置,[字符个数]
substring()参数:开始位置,[结束位置],不包括结束位置
三者操作的位置都为正时
var box = 'Bob hello block'
console.log(box.slice(4,6)); // 显示分割之后从4到6下标的字符串,不包括6的位置,he
console.log(box); //原来的字符串不改变,Bob hello block
console.log(box.substring(4,6)); //显示从4到6下标的字符串,不包括6的位置,he
console.log(box.substr(2,3)); //显示从2下标开始的3位字符串, b h
都只有一个参数时,且为正数时,都返回从开始位置到末尾的子字符串
console.log(box.slice(2)); // b hello block
console.log(box.substring(2)); // b hello block
console.log(box.substr(2)); // b hello block
都只有一个参数,且为负值时
console.log(box.slice(-2)); //总位数+(-2),ck
console.log(box.substring(-2)); //负数返回全部的字符,Bob hello block
console.log(box.substr(-2)); // 总位数+(-2),ck
可以看出:slice()和substr()都是 总位数+参数 ,然后计算得到的子字符串。而substring()是将负值转化为0
有两个参数,且有负数
console.log(box.slice(1,-2)); // ob hello blo
console.log(box.substring(2,-1)); // Bo
console.log(box.substr(2,-1)); // 空字符串
slice()会将传入的参数与长度加和再计算
substr()会将负的第一个参数+长度,将第二个负的参数转化为0
substring()会将所有负参数转化为0
slice(),substr(),substring()都不会修改原来的字符串
slice()和substring()第二个参数都不包括结束的位置
3. index()和lastIndex()
var box = "Mr.right";
console.log(box.indexOf()); //不传参数返回,-1
console.log(box.indexOf("r")); //返回字符r在字符串中第一次出现的位置 ,1
console.log(box.lastIndexOf("r")); //返回字符r在字符串中从字符串的后面向前查找第一次出现的位置,3
console.log(box.indexOf("r",3)); //从第三个位置往后搜索,r第一次出现的位置,3
console.log(box.lastIndexOf("r",1)); //从下标1往前搜索,1
设计一个小程序,返回同一个字母出现的所有位置
var box = "this is a apple i love you";
var boxArr = []; //创建一个数组,用来存放字符的所有位置
var pos = box.indexOf('i');
while(pos > -1){ //当还存在这个字符的时候
boxArr.push(pos);
pos = box.indexOf('i',pos+1);
}
alert(boxArr); //2,5,16
4. trim()
trim()方法会创建一个字符串的副本,删除前置及后缀所有的空格,然后返回结果
var box = ' hello ';
console.log(box.trim());
console.log(box.trimLeft());
console.log(box.trimRight());
结果 :
5. toUpperCase(),toLowerCase(), toLocaleLowerCase(), toLocaleUpperCase()
var box = 'this is an APPLE';
console.log(box.toLowerCase()); // this is an apple
console.log(box.toUpperCase()); // THIS IS AN APPLE
console.log(box.toLocaleLowerCase()); // this is an apple
console.log(box.toLocaleUpperCase()); // THIS IS AN APPLE
6. match(), search(), replace(),splice()
6.1 match()本质上与RegExp的exec()方法相同。接受一个参数,可以是正则表达式或者RegExp对象
var text = 'hello cat, set, bat, fat';
var pattern = /.at/;
var matches = text.match(pattern);
console.log(matches); // ["cat", index: 6, input: "hello cat, set, bat, fat"]
console.log(matches.index); // 6
console.log(matches[0]); // cat,第一个匹配的字符串
console.log(pattern.lastIndex); // 0
matches()方法返回一个数组,第一项是与整个模式匹配的字符串,之后的每一项保存着与正则表达式中的捕获组匹配的字符串
6.2 search()方法始终从字符串开头向后查找,参数与match()一样,返回字符串中第一个匹配项的索引,没有找到匹配项,返回-1
var pos = text.search(pattern);
console.log(pos); // 6,第一个匹配的项在第六个位置
6.3 replace()方法接受两个参数,第一个参数可以是字符串或者是正则表达式,第二个参数是替换成的字符串,特殊放入字符序列,函数
// 第一个参数是字符串,只会替换第一个
var result = text.replace('at', 'ond'); // hello cond, set, bat, fat
console.log(result);
// 如果想全部替换,第一个参数只能是正则表达式
result = text.replace(/at/g, 'ond');
console.log(result); // hello cond, set, bond, fond
6.4 split()方法基于分隔符将一个字符串分割成多个字符串,并将结果放在数组中,分隔符可以是字符串或者RegExp对象。还可以接受第二个参数,来指定数组的大小
var str = "hello,world,i,am,a,girl";
console.log(str.split(',')); // ["hello", "world", "i", "am", "a", "girl"]
console.log(str.split(',',3)); // ["hello", "world", "i"]
// 取得包含逗号字符的数组,第一项和最后一项是空字符串,因为通过正则表达式指定的分隔符出现在了字符串的开头和末尾
console.log(str.split(/[^\,]+/)); // ["", ",", ",", ",", ",", ",", ""]
7. localeCompare()
比较两个字符串,返回-1,0,1中的一个
var box = "jewel";
console.log(box.localeCompare("z")); //-1
console.log(box.localeCompare("a")); //1
console.log(box.localeCompare("jewel")); //0
前边字符串的ascll小于后边字符串的ascll,返回-1
相等返回0
大于返回1
和数组的sort差不多,数组的sort()方法默认也是按ascll码升序排序
var pox = ['a','v','f','k'];
console.log(pox.sort()); // ["a", "f", "k", "v"]
四 : 其他静态方法
静态方法是无需实例化,可以直接调用对象的属性和方法
1. fromCharCode()
fromCharCode()根据ascll码返回字符。可以接受多个参数
console.log(String.fromCharCode(76)); //静态方法,根据ASCII码返回字符, l
console.log(String.fromCharCode(90,112)); // Zp