JavaScript-自测题7

String 对象

String 对象方法

方法描述
anchor()创建 HTML 锚。
big()用大号字体显示字符串。
blink()显示闪动字符串。
bold()使用粗体显示字符串。
charAt()返回在指定位置的字符。
charCodeAt()返回在指定的位置的字符的 Unicode 编码。
concat()连接字符串。
fixed()以打字机文本显示字符串。
fontcolor()使用指定的颜色来显示字符串。
fontsize()使用指定的尺寸来显示字符串。
fromCharCode()从字符编码创建一个字符串。
indexOf()检索字符串。
italics()使用斜体显示字符串。
lastIndexOf()从后向前搜索字符串。
link()将字符串显示为链接。
localeCompare()用本地特定的顺序来比较两个字符串。
match()找到一个或多个正则表达式的匹配。
replace()替换与正则表达式匹配的子串。
search()检索与正则表达式相匹配的值。
slice()提取字符串的片断,并在新的字符串中返回被提取的部分。
small()使用小字号来显示字符串。
split()把字符串分割为字符串数组。
strike()使用删除线来显示字符串。
sub()把字符串显示为下标。
substr()从起始索引号提取字符串中指定数目的字符。
substring()提取字符串中两个指定的索引号之间的字符。
sup()把字符串显示为上标。
toLocaleLowerCase()把字符串转换为小写。
toLocaleUpperCase()把字符串转换为大写。
toLowerCase()把字符串转换为小写。
toUpperCase()把字符串转换为大写。
toSource()代表对象的源代码。
toString()返回字符串。
valueOf()返回某个字符串对象的原始值。

Array 对象

Array 对象方法

方法描述
concat()连接两个或更多的数组,并返回结果。
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()删除并返回数组的最后一个元素
push()向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()颠倒数组中元素的顺序。
shift()删除并返回数组的第一个元素
slice()从某个已有的数组返回选定的元素
sort()对数组的元素进行排序
splice()删除元素,并向数组添加新元素。
toSource()返回该对象的源代码。
toString()把数组转换为字符串,并返回结果。
toLocaleString()把数组转换为本地数组,并返回结果。
unshift()向数组的开头添加一个或更多元素,并返回新的长度。
valueOf()返回数组对象的原始值

常用数组/字符串方法与遍历

javascript有很多遍历的方法,for、for in、for of(ES6)、forEach、map、filter、every、some、Jquery的each等等。

  1. for 循环

for循环语句,最基础的遍历,以数组的下标为索引,对数组元素进行遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrFor(arr) {
try {
var ret = '',
st = performance.now();
for (var k = 0; k < arr.length; k++) {
ret += arr[k];
}
console.log(ret);
var diff = performance.now() - st;
console.log("array for 总耗时:" + diff);
} catch (e) {
console.log("array for 报错了:" + e.message);
}
}
  • for 循环不是函数,不存在返回值。
  1. for in

for in循环不仅可以遍历数组,还可以遍历对象,但for in存在一些陷阱,比如它会在遍历完元素之后,还会对数组或对象的prototype中的属性进行遍历,所以,for in 更像是为对象遍历而设计的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrForIn(arr) {
try {
var ret = '',
st = performance.now();
for (var k in arr) {
ret += arr[k];
}
console.log(ret);
var diff = performance.now() - st;
console.log("array for in 总耗时:" + diff);
} catch (e) {
console.log("array for in报错了:" + e.message);
}
}
  1. for of (ES6)

ES6中引入了 for … of 循环,以替代 for…in 和 forEach() ,允许对 Array(数组)、String(字符串)、Maps(映射)、Sets(集合)等可迭代的数据结构进行遍历。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrForOf(arr) {
try {
var ret = '',
st = performance.now();
for(var k of arr) {
ret += k;
}
console.log(ret);
var diff = performance.now() - st;
console.log("array for of 总耗时:" + diff);
} catch (e) {
console.log("array for of报错了:" + e.message);
}
}
  • for(var k of arr) 中的 k ,就是数组 arr 中的元素,而不是数组的下标。
  • IE 不支持,Edge支持。
  1. forEach

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrForEach(arr) {
try {
var ret = '',
st = performance.now();
arr.forEach(function (v, k) {
ret += v;
});
console.log(ret);
var diff = performance.now() - st;
console.log("array forEach 总耗时:" + diff);
} catch (e) {
console.log("array forEach报错了:" + e.message);
}
}
  • forEach() 对于空数组是不会执行回调函数的。

  • 回调函数 function (v, k) 中的 k 是数组的下标,v 是数组元素值。

  • IE9以下的版本不支持。

    1. map

    map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrMap(arr) {
try {
var ret = '',
st = performance.now();
arr.map(function (v, k) {
ret += v;
});
console.log(ret);
var diff = performance.now() - st;
console.log("array map 总耗时:" + diff);
} catch (e) {
console.log("array map报错了:" + e.message);
}
}
  • map() 返回一个新数组。
  • map() 不会对空数组进行检测。
  • map() 不会改变原始数组。
  1. filter

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function arrFilter(arr) {
try {
var ret = '',
st = performance.now();
arr.filter(function (v, k) {
ret += v;
});
console.log(ret);
var diff = performance.now() - st;
console.log("array filter 总耗时:" + diff);
} catch (e) {
console.log("array filter报错了:" + e.message);
}
}
  • filter() 不会对空数组进行检测。
  • filter() 不会改变原始数组。
  1. every

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供),返回 boolen。

1
2
3
4
5
6
7
8
9
10
11
12
13
function arrEvery(arr) {
try {
var st = performance.now();
var ret = arr.every(function (v, k) {
return v.length > 1;
});
console.log(ret);
var diff = performance.now() - st;
console.log("array every 总耗时:" + diff);
} catch (e) {
console.log("array every报错了:" + e.message);
}
}
  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。
  • every() 不会对空数组进行检测。
  • every() 不会改变原始数组。
  1. some

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。只要有一个元素满足则返回true,并不再继续往下判断。

1
2
3
4
5
6
7
8
9
10
11
12
13
function arrSome(arr) {
try {
var st = performance.now();
var ret = arr.some(function (v, k) {
return v.length > 1;
});
console.log(ret);
var diff = performance.now() - st;
console.log("array some 总耗时:" + diff);
} catch (e) {
console.log("array some报错了:" + e.message);
}
}
  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。
  • some() 不会对空数组进行检测。
  • some() 不会改变原始数组。
  1. Object.keys.forEach

Object.keys.forEach() 主要是用于遍历对象,获取对象的属性名,对于遍历数组意义不大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function objectKey(obj) {
try{
var ret = '',
st = performance.now();
Object.keys(obj).forEach(function(key, index, arr) {
ret += obj[key];
});
//ES6写法
//Object.keys(obj).forEach(k => {
// ret += obj[k];
//}); 
console.log(ret);
let diff = performance.now() - st;
console.log("object key 总耗时:" + diff);
}
catch (e){
console.log("object key 报错了:" + e.message);
}
}
  • Object.keys.forEach 在遍历时,回调函数的参数 key是属性名(对于数组,属性名和索引一一对应),index 是keys数组的索引,arr是keys数组;所以在取值的时候还是用 obj[key]

  • 例题:

1
2
3
4
5
6
7
8
9
10
11
12
13
var a ='abc'
a.split().every(function (v, k) {
console.log(v);
});
a.split().map(function (v, k) {
console.log(v);
})
a.split().forEach(function (v, k) {
console.log(v);
})
a.split().filter(function (v, k) {
console.log(v);
})