JavaScript基本包装类型之String类型

一 : 创建方法

两种创建方法,第一种是字面量写法,是基本类型

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

你可能感兴趣的:(JavaScript基本包装类型之String类型)