在JavaScript中,一切皆为对象,字符串,数字,数组,日期,json对象,甚至布尔值,都是对象。所以我们声明一个字符串,声明一个布尔值,它就是一个女朋友了,哦不,是对象。 [手动狗头] ,而不像PHP,需要new关键词去实例化 $girl = new Person(); 一个类(或者静态调用),才能成为对象。嗯,理解这一点,就好办了。
既然是对象,就有属性和方法,当我们声明一个字符串,它已经是一个对象了,我们可以直接调用它的方法了,下面介绍一些常用的方法。
一、String对象
方法1: substr(start,length) : 字符串截取,从指定索引开始,截取指定长度字符
方法2: substring(start,end) : 字符串截取,截取从指定索引开始,到指定索引结束中间的字符串 ,[ start,end)
注意:
1,方法1第二个参数指定了截取的长度,而方法2第二个参数指定截取的结束索引号
2,方法2截取的字符串包括起始索引号start的字符 , 但不包括结束索引号end的字符
var str = 'hello world , hello china';
var a = str.substr(3,10);
var b = str.substring(3,10);
console.log(a);// 打印出:lo world ,
console.log(b);// 打印出:lo worl
方法3:search(regexp):返回字符串第一次出现的位置/索引号,如果没有返回-1
var str = 'hello world , hello china';
var c = str.search('world');
console.log(c);// 打印出:6
方法4: indexOf(searchString,position): 检索字符串,返回的是字符在字符串的下标,第二个非必传参数指定开始搜索的起始下标
var str = 'hello world , hello china';
var d = str.indexOf('hello',2);
console.log(d);// 打印出:14
方法5:match(regexp):在字符串内检索指定的值或找到一个或多个正则表达式的匹配,返回的是值而不是值的位置
var str = '报警电话110,火警电话119,求救电话120';
var e = str.match('电话');
var f = str.match(/[0-9]{3}/);
var g = str.match(/[0-9]{3}/g);//如果有g修饰,则匹配多个
console.log(e);
console.log(f);
console.log(g);
方法6:replace():替换匹配的字符串
var str = '报警电话110,火警电话119,求救电话120';
var h = str.replace(/[0-9]{3}/,'***');
var i = str.replace(/[0-9]{3}/g,'***');
console.log(h); //打印出:报警电话***,火警电话119,求救电话120
console.log(i);//打印出:报警电话***,火警电话***,求救电话***
方法7:slice():提取字符串片段,并在新的字符串中返回被提取的部分
var str1 = 'nihaoya wobuhaoya'
console.log(str1.slice(4,9)); //4位置开始,到9的前一个位置结束
console.log(str1.slice(2,14));//start位置开始,end前一个位置结束
console.log(str1);//原字符串不变
console.log(str1.slice(-1,0)); //返回的是空字符串
console.log(str1.slice(30,100)); //长度超过字符串的长度,返回空字符串
console.log(str1.slice(-1,10));//返回的是空字符串
方法8:split():把字符分割成数组
var str1 = "hello-thinkyou-thinkyou-very-much";
console.log(str1.split(''));
var str2 = str1.split('-');
console.log(str2);
console.log(str1);//原字符串不变
方法9:大小写转换:
1,把字符串转换成大写:toLocaleUpperCase() , toUpperCase()
2,把字符串转换成小写:toLocaleLowerCase() , toLowerCase()
注意:对有些地区来说,针对地区的方法与其通用方法得到的结果相同,但少数语言(如土耳其语言)会为Unicode大小写转换应用特殊的规则,这时候就必须使用针对地区的方法来保证实现正确的转换。所以我们用toLocaleUpperCase() ,toLocaleLowerCase() 来进行转换会保险一些。
二、array对象
属性1:length 返回数组的长度
方法1:把数组转换为字符串
注意:
1,toString() 方法 在其他对象eg:boolean,int,json 也是存在toString()方法的
2,join(separator)方法 separator参数为分隔元素的分隔符,默认不传则为逗号 ,
var arr = [1,2,5,3,4,7,6];
var a = arr.toString();
console.log(a); //打印出: 1,2,5,3,4,7,6
var b = arr.join('-');
console.log(b); //打印出 : 1-2-5-3-4-7-6
方法2:在数组的尾部推入push()与取出pop()元素.
push()返回值是操作后新数组的长度,push()可以同时推入多个元素
pop()返回值是取出的元素
var arr = [1,2,5,3,4,7,6];
var a = arr.push('苹果');
var b = arr.push('橘子','草莓');
console.log(a); // 打印出: 8
console.log(b); // 打印出: 10
console.log(arr); // 打印出:(10) [1, 2, 5, 3, 4, 7, 6, "苹果", "橘子", "草莓"]
var c = arr.pop();
console.log(c); // 打印出: 草莓
console.log(arr); // 打印出:(9) [1, 2, 5, 3, 4, 7, 6, "苹果", "橘子"]
方法3:在数组的头部推入unshift()与取出shift()元素
unshift()返回新数组的长度,可以同时推入多个元素
shift()返回值是取出的元素
var arr = [1,2,5,3,4,7,6];
var a = arr.unshift('苹果','香蕉');
console.log(a);// 打印出: 9
console.log(arr);// 打印出: (9) ["苹果", "香蕉", 1, 2, 5, 3, 4, 7, 6]
var b = arr.shift();
console.log(b);// 打印出: 苹果
console.log(arr);// 打印出: (8) ["香蕉", 1, 2, 5, 3, 4, 7, 6]
方法4:slice(start,end):取出数组中的某一片段
返回从原数组中指定开始下标到结束下标之间的项组成的新数组(原数组不变)
方法5:splice(start,deleteCount)删除数组中的某一片段
第一个参数为起始下标,第二个参数为删除的元素个数。返回值为删除的元素(原数组改变)
var arr = [1,2,5,3,4,7,6];
var b = arr.slice(2,4);
console.log(b); //打印出: (2) [5, 3]
var c = arr.splice(2,2);
console.log(c); //打印出: (2) [5, 3]
console.log(arr);//打印出返回被删除后的数组 (5) [1, 2, 4, 7, 6]
方法6:sort():按指定的参数对数组进行排序
注意:
1,默认是按照字母的升序,数字的升序排列,返回的值是经过排序后的数组
2,40会排5的前面,因为4 小于 5 ,所以我们给数字排序,要传入一个回调函数
var arr = [2,1,5,3,40,7,60];
var a = arr.sort();
console.log(a); //打印出: (7) [1, 2, 3, 40, 5, 60, 7]
var b = arr.sort(function (a,b) {
return a-b;
});
console.log(b); //打印出: (7) [1, 2, 3, 5, 7, 40, 60]
var c = arr.sort(function (a,b) {
return b-a;
});
console.log(c);//打印出:(7) [60, 40, 7, 5, 3, 2, 1]
3,同理,当我们需要给一个对象数组按照对象中某一个属性排序时,也需要传入一个回调函数:
var student = [
{name:'Mike',age:18},
{name:'Joe',age:22},
{name:'Mongo',age:9},
{name:'Tom',age:30}
];
var d = student.sort(compare('age'));
function compare(prop) {
return function (a,b) {
var value1 = a[prop];
var value2 = b[prop];
return value1-value2;
}
}
console.log(d);
/** 打印出:
0: {name: "Mongo", age: 9}
1: {name: "Mike", age: 18}
2: {name: "Joe", age: 22}
3: {name: "Tom", age: 30}
length: 4
__proto__: Array(0)
*/
方法7:indexOf():从数组的开头向后查找,接受两个参数,要查找的项和查找起点的位置索引
var arr = [2,1,5,3,40,7,40];
a = arr.indexOf(40,2);
console.log(a); //打印出: 4
方法8:forEach():对数组的每个元素执行一次提供的函数。
var student = [
{name:'Mike',age:18},
{name:'Joe',age:22},
{name:'Mongo',age:9},
{name:'Tom',age:31}
];
student.forEach(function (item) {
var desc = item.name+'今年'+item.age+'岁了';
if(item.age > 30) desc += ',还是没车没房';
console.log(desc);
});
/** 打印出:
Mike今年18岁了
Joe今年22岁了
Mongo今年9岁了
Tom今年31岁了,还是没车没房
* /
方法9:reverse() 方法用于颠倒数组中元素的顺序
改变原数组,返回颠倒后的数组:
var arr = ['小明','小红','小李'];
var a = arr.reverse();
console.log(arr); // 打印出: (3) ["小李", "小红", "小明"]
console.log(a); // 打印出: (3) ["小李", "小红", "小明"]
方法10:map()方法对数组的每一个元素运行给定的函数,返回函数调用的结果组成的数组
var arr = [1, 4, 9, 16];
var a = arr.map(x => x * 2); //对数组的每项*2
console.log(a); //打印出: [2, 8, 18, 32]
方法11: every和some方法(ES5):
1,every是所有函数的每个回调都返回true的时候才会返回true,当遇到false的时候终止执行,返回false。类似于: 且 &&
2,some函数是存在有一个函数返回true的时候终止执行并返回true,否则返回false。类似于: 或 ||
// every
var arr = [1,6,8,-2,-5,7,-4]
var isPositive = arr.every(function(value){
return value > 0;
})
console.log(isPositive) // false
//some
var arr = [1,6,8,-2,-5,7,-4]
var isPositive = arr.some(function(value){
return value > 0;
})
console.log(isPositive) // true
方法12:filter(function(element))方法 (ES5)
返回数组的子集,子集的元素是回调函数中返回true的元素。其实就是filter筛选、过滤的意思
var arr = [1,6,8,-2,-5,7,-4]
var positiverArr = arr.filter(function(value){
return value > 0
})
console.log(positiverArr); // 打印出:[1, 6, 8, 7]
console.log(arr); // 打印出:[1, 6, 8, -2, -5, 7, -4]