字符串的内置功能
| 字符串功能 | 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() 返回某个字符串对象的原始值。 |
1.代码演示
1.1 toUpperCase()和toLocaleLowerCase() 全大写,全小写
var str="poStasdasdf"
var re=str.toUpperCase()
console.log(re)
var re2=str.toLocaleLowerCase()
console.log(re2)
实现首字母大写(字符串也可取下标)
var str="poStasdasdf"
var re3=str[1]
var re4=str.length
console.log(re3,re4)
String.prototype.capUppserCase=function() {
var re=this[0].toUpperCase()
for(var i=1;i<this.length;i++){
re+=this[i]
}
return re
}
var str="poStasdasdf"
var re=str.capUppserCase()
console.log(re)
1.2 substr(2,2) 截取字符串
截取第几个元素的后几个元素
var str="hello"
var re=str.substr(2,2)
console.log(re,str)
起始位置可以为负数,从后往前数
var str="hello"
var re=str.substr(-3,2)//from可以是负数 代表从后往前数
console.log(re,str)
1.3 substring() 截取字符串 左开右闭 (]
从第start个元素到第end个元素,start元素不截取
var str="hello"
var re=str.substring(1,3)
console.log(re,str)
起始位置可以为负,等同于从第0个元素开始取
var str="hello"
var re=str.substring(-5,1)//(-5,1]," hello"
console.log(re,str)
1.4 split() 字符串截子串
var str="helxlxo"
var arr=str.split("x")//分割符可以为任意
console.log(arr)
1.5 slice() 截取字符串 与substring()相同
var str="hello"
var re1=str.substring(0,4)
var re2=str.slice(0,4)
console.log(re1,re2)
1.6 indexOf() 检索字符串
当检索到第一个目标时就会停止,并显示那个目标的下标
var str="abcdaefa"
var re1=str.indexOf("cde")//没有就是-1,第二个参数不写默认为0
var re2=str.indexOf("a",5)//检索“a”,从下标为5的元素开始检索
console.log(re1,re2)
1.7 toString() 返回字符串
var str="hello"
var re=str.toString()
console.log(re)
1.8 valueOf() 返回某个字符串对象的原始值
var strobj=new String("hqyj")
var re2=strobj.valueOf()
console.log(strobj,typeof strobj,re2)
笔试题
1.笔试题原题:把当前网页的url的参数解析为一个对象
window.location.href//获取当前网页地址
var url='http://www.hqyj.com/index.html?user=karen&page=10&count=100'
function parseurl(str) {
var querystring=str.split("?")[1]
var arr=querystring.split("&")//["user=karen","page=10","count=100"]
var obj={}
for(var i=0;i<arr.length;i++){
var arr2=arr[i].split("=")
obj[arr2[0]]=arr2[1]
}
return obj
}
var obj=parseurl(url)//{user:"karen",page:"10",count:"100"}
console.log(obj)
分析: 1.var obj=parseurl(url) 调用函数
2.var querystring=str.split("?")[1] 将url='www.hqyj.com/index.html?…' 从?处截断
3.var arr=querystring.split("&"),将user=karen&page=10&count=100从“&”出截断放入数组中
4.var obj={},构建一个空对象
5.for(var i=0;i<arr.length;i++){ var arr2=arr[i].split("=") obj[arr2[0]]=arr2[1] }进行数组遍历,将数组的每个成员从“=”处截断,放入一个新的数组当中,obj[arr2[0]]=arr2[1],下标为0的是对象成员的名字,下标为1的是对象成员的值。函数调用的结果返回对象
- console.log(obj)打印{user:"karen",page:"10",count:"100"}
2.笔试题 检索“的”出现的次数
String.prototype.count1=function(str) {
var re=-1;
var count=0
do{
re=this.indexOf(str,re+1)
if(re!=-1){count++}
}while(re!=-1)
return count
}
var str="的1935年秋,原在浙西南坚持游击斗争红军挺的进师,在刘英和粟裕率领下,冲破蒋军的重重封这是叶飞和粟裕、刘英第二次会面了。上一次会面,是在1934年8月,由红7军团组成北上抗日先遣队路经闽东,叶飞发动地方组织,为先遣队补充了不少兵员和给养。"
var re=str.count1("的")
console.log(re)//的出现的次数
分析:
String.prototype.count1 在字符串原型的prototype属性上构建一个count1 函数,想好逻辑.将需要检索的字符串传入进去。
3.包装对象
因为字符串是基本数据 所有所有的基本数据当做对象使用时 它们的点语法 都会多一步隐式操作 (隐式包装成一个对象)
var str="hello"
str.age=20
var re=str.age
console.log(re)
分析:
var str="hello"
str.age=20
//隐式操作
//var str=new String("hello")
//str.age=20
var re=str.age
//隐式操作
//var str=new String("hello")//重新声明一个str对象
// var re=str.age
console.log(re)//und
数组的内置对象
| concat() 连接两个或更多的数组,并返回结果。 | |
|---|---|
| join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 | |
| pop() 删除并返回数组的最后一个元素 | |
| push() 向数组的末尾添加一个或更多元素,并返回新的长度。 | |
| reverse() 颠倒数组中元素的顺序。 | |
| shift() 删除并返回数组的第一个元素 | |
| slice() 从某个已有的数组返回选定的元素 | |
| sort() 对数组的元素进行排序 | |
| splice() 删除元素,并向数组添加新元素。 | |
| toSource() 返回该对象的源代码。 | |
| toString() 把数组转换为字符串,并返回结果。 | |
| toLocaleString() 把数组转换为本地数组,并返回结果。 | |
| unshift() 向数组的开头添加一个或更多元素,并返回新的长度。 | |
| valueOf() 返回数组对象的原始值 |
1.数组的内置功能
1.var arr=[10,20,304] //声明一个数组
2.var arr2=new Array()//构建一个空数组[]
3.var arr3=new Array(10)//构建一个长度为10的数组 [].length=10
4.var arr4=new Array(10,20)//构建一个成员为10,20的数组 [10,20]
5.var arr5=new Array("hello")//构建一个成员为hello的数组["hello"]
2.代码演示
2.1 concat() 连接两个或更多的数组,并返回结果
var arr=[10,2,3,4,44]
var arr2=["hello","h5"]
var arr3=["666"]
var arr4=arr.concat(arr2,arr3,100,{name:"karen"})
console.log(arr,arr2,arr3,arr4)
2.2 join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔
var arr=[10,2,3,4,44,[90,10],{name:"karen"}]
var re=arr.join("*")//不传参数默认是逗号“,” 传参 把数组中每一个元素toString()然后拼接
console.log(re,arr)
var re=arr.toString()
console.log(re)
2.3 pop() 删除并返回数组的最后一个元素
var arr=[10,230,54]
var re=arr.pop()//返回当次删除数组元素后的最后一个元素
arr.pop()
arr.pop()
console.log(re,arr)
var re2=arr.pop()
console.log(re2,arr)
2.4 push() 向数组的末尾添加一个或更多元素,并返回新的长度
var arr=[10,230,54]
var re=arr.push(10,20)
console.log(re,arr)
2.5 shift() 删除并返回数组的第一个元素
var arr=[10,230,54]
var re=arr.shift()
console.log(re,arr)
2.6 unshift() 向数组的开头添加一个或更多元素,并返回新的长度
var arr=[10,230,54]
var re=arr.unshift(100,200)
console.log(re,arr)
2.7 slice() 从某个已有的数组返回选定的元素
var arr=[10,30,40,5,6]
var re=arr.splice(2,2,"hello","h5")//从下标2开始删除2个元素 并在这里插入"hello","h5"
console.log(re,arr)
2.8 sort() 对数组的元素进行排序 默认是按照表码排序
var arr=[10,50,40,20,30,6]
var re=arr.sort()//默认是按照表码排序
console.log(re,arr)
从大到小排序
var arr=[10,50,40,20,30,6]
var re=arr.sort(function(a,b){
return b-a
})
console.log(re,arr)
从小到大排序
var arr=[10,50,40,20,30,6]
var re=arr.sort(function(a,b){
return a-b
})
console.log(re,arr)
2.9 valueOf() 返回数组对象的原始值
var arr=[10,20,304]
var arr2=new Array(20,30,405,10)
console.log(arr2.valueOf())
数组方法的返回对象
所有数组的方法 返回了一个新数组 新数组中的元素 如果是以前数组中的引用数据 那么是同一个引用
var arr=[{name:"karen"},100,203,4]
var arr2=[1,2,2,3,4]
var re=arr.concat(arr2,90,20,304)
console.log(re==arr2,re==arr,re)
re[0].name="jack"
console.log(arr)
遍历器
取出数据容器中的每一个元素的工具
| //1、for 循环 | |
|---|---|
| let arr = [1, 2, 3]; | |
| for (let i = 0; i < arr.length; i++) { | |
| console.log(i, arr[i]) | |
| } | |
| //for 循环是 Js 中最常用的一个循环工具, 经常用于数组的循环遍历。 | |
| //2、for in 循环 | |
| let obj = { | |
| name: 'zhou', | |
| age: '**' | |
| } | |
| for (let i in obj) { | |
| console.log(i, obj[i]) | |
| } | |
| //for in 循环主要用于遍历普通对象, i 代表对象的 key 值, obj[i] 代表对应的 value, 当用它来遍历数组时候, 多数情况下也能达到同样的效果, 但是你不要这么做, 这是有风险的, 因为 i 输出为字符串形式, 而不是数组需要的数字下标, 这意味着在某些情况下, 会发生字符串运算, 导致数据错误, 比如: '52' +1 = '521' 而不是我们需要的 53。另外for in 循环的时候, 不仅遍历自身的属性, 还会找到 prototype 上去, 所以最好在循环体内加一个判断, 就用 obj[i].hasOwnProperty(i), 这样就避免遍历出太多不需要的属性。 | |
| //3、while 循环同样的遍历 cars 数组, 先用for 循环方法 | |
| let cars = ["BMW", "Volvo", "Saab", "Ford"]; | |
| let i = 0; | |
| for (; cars[i];) { | |
| console.log(cars[i]) | |
| i++; | |
| }; | |
| //然后是while 循环方法 | |
| cars = ["BMW", "Volvo", "Saab", "Ford"]; | |
| var i = 0; | |
| while (cars[i]) { | |
| console.log(cars[i] + " ") | |
| i++; | |
| }; | |
| //我们发现, 它们可以实现同样的效果, 事实上它们底层的处理是一样的, 不过for 循环可以把定义、 条件判断、 自增自减操作放到一个条件里执行, 代码看起来方便一些, 仅此而已。 | |
| //4、 do-while 循环 | |
| let i = 3; | |
| do { | |
| console.log(i) | |
| i--; | |
| } | |
| while (i > 0) | |
| //do-while 循环是while循环的一个变体, 它首先执行一次操作, 然后才进行条件判断, 是 true 的话再继续执行操作, 是 false 的话循环结束。 | |
| //5、 Array forEach 循环 | |
| let arr = [1, 2, 3]; | |
| arr.forEach(function(i, index) { | |
| console.log(i, index) | |
| }) | |
| //forEach循环, 循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度, 他有三个参数, 只有第一个是必需的, 代表当前下标下的 value。另外请注意, forEach 循环在所有元素调用完毕之前是不能停止的, 它没有break 语句, 如果你必须要停止, 可以尝试try-catch 语句, 就是在要强制退出的时候, 抛出一个 error 给catch 捕捉到, 然后在catch 里面return, 这样就能中止循环了, 如果你经常用这个方法, 最好自定义一个这样的 forEach 函数在你的库里。 | |
| //6、 Array map() 方法 | |
| let arr = [1, 2, 3]; | |
| let tt = arr.map(function(i) { | |
| console.log(i) | |
| return i * 2; | |
| }) | |
| //map() 方法返回一个新数组, 数组中的元素为原始数组元素调用函数处理后的值。注意: map 和 forEach 方法都是只能用来遍历数组, 不能用来遍历普通对象。 | |
| //7、 Array filter() 方法 | |
| let arr = [1, 2, 3]; | |
| let tt = arr.filter(function(i) { | |
| return i > 1; | |
| }) | |
| //filter 方法是 Array 对象内置方法, 它会返回通过过滤的元素, 不改变原来的数组。 | |
| //8、 Array some() 方法 | |
| let arr = [1, 2, 3]; | |
| let tt = arr.some(function(i) { | |
| return i > 1; | |
| }) | |
| //some() 方法用于检测数组中的元素是否满足指定条件( 函数提供), 返回 boolean 值, 不改变原数组。 | |
| //9、 Array every() 方法 | |
| let arr = [1, 2, 3]; | |
| let tt = arr.some(function(i) { | |
| return i > 1; | |
| }) | |
| // 检测数组中元素是否都大于1 | |
| // false | |
| //every() 方法用于检测数组所有元素是否都符合指定条件( 通过函数提供), 返回 boolean 值, 不改变原数组。 | |
| //10、 Array reduce() 方法 | |
| let arr = [1, 2, 3]; | |
| let ad = arr.reduce(function(i, j) { | |
| return i + j; | |
| }) | |
| // 6 | |
| reduce() 方法接收一个函数作为累加器, 数组中的每个值( 从左到右) 开始缩减, 最终计算为一个值。 | |
| 11、 Array reduceRight() 方法 | |
| let arr = [1, 2, 3]; | |
| let ad = arr.reduceRight(function(i, j) { | |
| return i + j; | |
| }) | |
| // 6 | |
| reduceRight() 方法, 和 reduce() 功能是一样的, 它是从数组的末尾处向前开始计算。 | |
| 12、for of 循环 | |
| let arr = ['name', 'age']; | |
| for (let i of arr) { | |
| console.log(i) | |
| } | |
| // name | |
| // age | |
| for of 循环是 Es6 中新增的语句, 用来替代 | |
| for in 和 forEach, 它允许你遍历 Arrays( 数组), Strings( 字符串), Maps( 映射), Sets( 集合) 等可迭代(Iterable data) 的数据结构, 注意它的兼容性。 |
1.代码演示
1.1 for 最重要的 兼容性好
var arr=[10,203,44,54,5]
for(var i=2;i<4;i++){
arr[i]
console.log(arr[i]);
}
1.2 for in
for in 循环主要用于遍历普通对象, i 代表对象的 key 值, obj[i] 代表对应的 value, 当用它来遍历数组时候, 多数情况下也能达到同样的效果, 但是你不要这么做, 这是有风险的, 因为 i 输出为字符串形式, 而不是数组需要的数字下标, 这意味着在某些情况下, 会发生字符串运算, 导致数据错误, 比如: '52' +1 = '521' 而不是我们需要的 53。另外for in 循环的时候, 不仅遍历自身的属性, 还会找到 prototype 上去, 所以最好在循环体内加一个判断, 就用 obj[i].hasOwnProperty(i), 这样就避免遍历出太多不需要的属性
var arr=[10,203,44]
for (var i in arr) {
console.log(i,arr[i])
}
var obj={name:"karen",age:23}
for(var key in obj){
console.log(key)
}
1.3 Array forEach 循环
forEach循环, 循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度, 他有三个参数, 只有第一个是必需的, 代表当前下标下的 value。另外请注意, forEach 循环在所有元素调用完毕之前是不能停止的, 它没有break 语句, 如果你必须要停止, 可以尝试try-catch 语句, 就是在要强制退出的时候, 抛出一个 error 给catch 捕捉到, 然后在catch 里面return, 这样就能中止循环了, 如果你经常用这个方法, 最好自定义一个这样的 forEach 函数在你的库里
var arr=[10,203,34]
arr.forEach(function(el,index,arr){
console.log(el,index,arr)
})
构建一个forEach循环
var arr = [10, 203, 44]
Array.prototype.myforEach = function(callback) {
for (var i = 0; i < this.length; i++) {
callback(this[i])
}
}
var re = arr.myforEach(function(el) {
console.log(el)
})
1.4 Array map() 方法
map() 方法返回一个新数组, 数组中的元素为原始数组元素调用函数处理后的值。注意: map 和 forEach 方法都是只能用来遍历数组, 不能用来遍历普通对象
var arr=[10,20,9]
var re=arr.map(function(el){
console.log(el)
return el*el
})
console.log(re,arr)
map()也有三个变量
var arr=[10,203,4]
arr.map(function(el,index,arr){
console.log(el,index,arr)
})
案列:计算年龄
var arr=[{name:"karen",birth:"2001-02-03"},{name:"jack",birth:"2002-02-03"}]
var arr2=arr.map(function(el){
el.age=new Date().getFullYear()-new Date(el.birth).getFullYear()
return el
})
console.log(arr2)
1.5 Array filter() 方法
filter 方法是 Array 对象内置方法, 它会返回通过过滤的元素, 不改变原来的数组,过滤结果返回boolean,true通过,false不通过
var arr=[10,80,34,50]
var re=arr.filter(function(el,index,arr){
if(el>18){
return true
}else{
return false
}
})
console.log(re)
案列:通过正确的人员
var arr=[{tag:0,name:"karen"},{tag:1,name:"jack"},{tag:1,name:"marry"}]
var arr2=arr.filter(function(el){
return el.tag//0为false,1为true
})
console.log(arr2)
1.6 Array some() 方法
some() 方法用于检测数组中的元素是否满足指定条件( 函数提供), 返回 boolean 值, 不改变原数组
var arr=[10,20,50,400]
var re=arr.some(function(el){
console.log(el)
return el>100
})
console.log(re)
笔试题:设计some()
Array.prototype.mysome=function(callback) {
for(var i=0;i<this.length;i++){
if(callback(this[i],i,this)){return true}
}
return false
}
var arr=[10,200,500,400]
var re=arr.mysome(function(el){
console.log(el)
return el>100
})
console.log(re)
1.7 Array reduce() 方法
reduce() 方法接收一个函数作为累加器, 数组中的每个值( 从左到右) 开始缩减, 最终计算为一个值
var arr=[10,20,4,5]
var re=arr.reduce(function(n1,n2){
console.log(n1,n2)
return n1+n2
})
console.log(re)
reduce可以添加初始值
var arr=[10,20,4,5]
var re=arr.reduce(function(n1,n2){
console.log(n1,n2,1111111111)
return n1+n2
},10000)
console.log(re)
案列:计算菜单价格
var arr = [{
title: "肉香肉丝",
price: 18,
count: 2
},
{
title: "米饭",
price: 1,
count: 5
},
{
title: "水煮肉片",
price: 28,
count: 1
},
{
title: "鸡公煲",
price: 20,
count: 1
}
]
var re=arr.reduce(function(n1,n2){
return n1+n2.price*n2.count
},0)
console.log(re)
var re=arr.reduce(function(n1,n2){
if(!n1.total){
n1.total=n1.price*n1.count+n2.price*n2.count
}
else{
n1.total=n1.total+n2.price*n2.count
}
return n1
})
console.log(re)
1.8 Array reduceRight() 方法
reduceRight() 方法, 和 reduce() 功能是一样的, 它是从数组的末尾处向前开始计算。
var arr=[100,203,34,50]
arr.reduceRight(function (n1,n2){
console.log(n1,n2)
return n1+n2
},0)
1.9 for of
for of 循环是 Es6 中新增的语句, 用来替代 for in 和 forEach, 它允许你遍历 Arrays( 数组), Strings( 字符串), Maps( 映射), Sets( 集合) 等可迭代(Iterable data) 的数据结构, 注意它的兼容性
var arr=[10,203,34]
for (let s of arr) {
console.log(s)
}