5.1 Object
let person = {}
let person = new Object()
person.name = 'Nicholas';
5.2 Array
let colors = ['red','blue','yellow']
let colors = new Array('red','blue','yellow')
colors[0] //red
colors.length //3
5.2.2 转换方法
toString() / valueOf() / toLocalString() / join(',')
let colors = ['red','blue','yellow']
alert(colors.toString()) // "red,blue,yellow"
alert(colors)// "red,blue,yellow"
//alert只接收字符串,所以隐性调用toString方法
let person1,person2 = {}
let people = [person1,person2]
//如果组数中存着对象,则会调用每一项对象的toString方法
5.2.3 栈方法
让数组表现的像栈一样,Last-In-First-Out,后进先出
push() / pop()
let colors = [];
colors.push('red','green') //在数组后面推入两项,返回长度
colors.pop() //在数组后面移除一项,返回移除项
5.2.4 队列方法
让数组表现的像堆一样,First-In-First-Out,先进先出
unshift() / shift()
let colors = [];
colors.unshift() //在数组前面推入两项,返回长度
colors.shift() //在数组前面移出一项,返回移除项目
5.2.5 重排序方法
reverse() 反转排序,返回排列后的数组
sort() 自定义排序,默认转toString后按字符串排序,返回排列后的数组
let values = [0,1,5,10,15]
values.sort() // 0,1,10,15,5
function compare(value1,value2) {
if(value1<value2){
return -1; //值小,返回-1,排前面
}else if(value1>vlaue2) {
return 1 //值大,返回1,排后面
}else {
return 0 //相等,不变
}
}
values.sort(compare) // 0,1,5,10,15
5.2.6 操作方法
concat() / slice() / splice()
let colors = ['red']
let colors2 = colors.concat('blue',['black'])// ['red','blue','black']
//concat() 创建一个数组副本,可添加额外参数
let colors = ['red','blue','black'];
let colors2 = colors.slice(0,2); //['red','blue']
//slice(start,end)分割数组,end不包括最后一个
splice(0,1,'A','B') //从0开始,删除一个,添加一个A字符,添加一个B字符
5.2.7 位置方法
indexOf() / lastIndexOf()
从头查 / 从尾查,从0开始数起
5.2.8 迭代方法
every() / some() / filter() / forEach() / map()
- 每个方法都接收两个参数:
在每一项上运行的函数(必须)和运行该函数的作用域对象(可选) - 传入这些方法的函数都接受三个参数:
该数组项的值,该数组项的位置,和该数组本身
let number = [1,2,3,4,3,2,1]
let fun = (item,index,array)=>{ return (item>2) }
let fun2 = (item,index,array)=>{ return (item*2) }
number.every( fun ) //false ; 全true返true,否则返false
number.some( fun ) //true ; 有true就返true,没有返false
number.filter( fun ) //[3,4,3] ; 筛选出返回true的项,组成数组
number.map( fun2 ) //[2,4,6,8,6,4,3,2] ; 返回结果所组成的数组
number.forEach( ( item,index,array )=>{ ... } )
5.2.9 归并方法
reduce() / reduceRight()
- 这两个方法都会迭代数组的所有项,然后构建一个最终的返回值。
- reduce()从数组的第一项开始,逐个遍历到最后一项
- educeRight()从数组的最后一项开始,逐个遍历到第一项
- 这两个方法都接收两个参数:
在每一项上调用的回调函数,和作为归并基础的初始值(可选) - 回调函数接收4个参数:前一个值,当前值,项的索引,数组对象
let num = [ 1, 2, 3, 4, 5 ]
let fun = ( prev, cur, index, array )=>{ return prev+cur }
num.reduce( fun ) //15
num.reduceRight( fun ) //15
5.3 Date类型
new Date() //创建一个Date对象
Date.parse() //接收一个字符串返回相应的毫秒数
new Date( Date.parse("2018/06/22 08:00:20") )
简写:new Date("2018/06/22 08:00:20")
5.3.1 继承的方法
toString() / toTimeString() / toDateString()
toLocaleString() / toLocaleTimeString() / toLocaleDateString()
indexOf() 毫秒数
toString与toLocaleString每个浏览器重写的都不同,所以没什么价值
5.3.2 日期/时间组件
getTime() //返回日期毫秒数,与valueOf值相同
getFullYear() //返回4位数年份
getMonth() //返回月份 0-11
getDate() //返回日数 1开始
getDay() //返回星期数 0为星期天
getHoure() //返回小时数 0-23
getMinutes() //返回分钟数 0-59
getSeconds() 返回秒数 0-59
5.4 RegExp类型
创建正则表达式
var expression = / pattern / flags
//flags:用以标明正则表达式的行为
//pattern:正则表达式描述字符
- 标志:g(全局) / i(不区分大小写) / m(表示多行)
- 常用元字符:
. /w /W /d /D /s /S - 描述字符范围:
[abc] ^abc [0-9] [a-z] [A-Z] [A-z] - 选择匹配:|
- 重复匹配:
n+{1,} / n*{0,} / n?{0,1}
n{x}(包含x个n) / n{x,}(最少x个n) / n{,y}(最多y个n) / n{x,y}(最少x个n,最多y个n) - 边界量词:^ 匹配开头 / $ 匹配结尾
- 声明量词:
正向声明:匹配模式(?=匹配条件) //满足条件才匹配
反向声明:匹配模式(?!=匹配条件) //不满足条件才匹配 - 子表达式:(),用括号对匹配模式进行分组
5.4.2 RegExp实例方法
exec() / test()
let text = "mom and dad and baby";
let pattern = /mom( and dad( and baby))/g
pattern.exec(text);
//exec() 捕获分组
let text = 'ggle gogle google';
let pattern = /go?gle/g
pattern.exec(text) //true
//test() 是否匹配 返回布尔值
5.4.3 字符串的正则匹配方法
match() / search() / replace()
var s = "ggle gogle google gooogle";
var pattern = /go?gle/g;
s.match(pattern) //[ggle,gogle];
//match() 本质上是调用exec(),接收一个正则表达式,返回数组
var text = 'cat,bar,sat,fat';
var pos = text.search(/at/); //1
//search() 返回匹配项的第一个索引值
var text = 'cat,bar,sat,fat';
text.replace(/at/g,'ond') //cond,bond,sond,fond
//replace() 替换正则匹配项
5.5 Function 类型
- 每个函数都是Function的实例,Function原型是Object。
- 每个函数都是对象,与其他引用类型一样有属性与方法。
- 函数名是基本类型指针,指向函数对象,所以不会与某个函数绑定;
function sum(x,y){ return x+y } //定义一个sum函数
sum(10,10) //20,sum指向该函数对象
var cp = sum; //cp也指向该函数对象
sum = null; //sum断开指向
cp(10,10) //20,sum依旧指向该函数对象
5.5.1 没有重载
- 将函数名看为指针,就很好理解函数没有重载,
- 第二个函数的引用覆盖了第一个函数的引用
function add(x){ return x+100 }
function add(y){ return y+200 } //add(100),300
add = (x)=>{return x+100}
add = (y)=>{return y+200} //add(100),300
5.5.2 函数声明与函数表达式
- 解析器会提前读取函数声明,在任何代码执行之前就可以访问
- 而函数表达式需要执行到他所在的代码时才会被解释执行
alert(sum())
function sum(){} //函数声明提升,可执行
alert(sum())
let sum = ()=>{} //报错
5.5.3 作为值的函数
- 函数名本身就是变量,所以把函数当成变量一样进行传递
- 将一个函数当成参数传给另一个函数
- 或者在一个函数中把函数作为返回值返回
5.5.4 函数内部属性
两个特殊对象:arguments / this
- arguments,类数组对象,包含着传入函数中的所有参数
arguments.callee //指针,指向拥有这个arguments对象的函数
arguments.callee() //调用函数,递归避免函数的执行与函数名绑定
Function.caller() //指针,指向调用该函数的函数引用,全局返回null
- this,引用的是函数执行的环境对象,网页全局函数执行对象是window
window.color = 'red';
var o = {color='blue'};
function sayColor(){
alert(color);
}
sayColor() //red,sayColor执行环境对象为window,this=window
o.sayColor = sayColor;
o.sayColor() //'blue',say执行环境对象为o,this=o
5.5.5 函数的属性和方法
属性:length / prototype
- length 形参数量
- prototype 原型
方法:call() / apply() ,更改函数执行环境对象即this,并传递参数
- applay()
接收两个参数:函数的执行环境对象,参数组数( [] || arguments )
window.color = 'red';
var o = {color:'blue'};
function sayColor(){ alert(color) }
sayColor.call(this) // 'red'
sayColor.call(window) //'red'
sayColor.call(o) // 'blue',this=o
- call()
与applay作用相同,不同的是接收参数的方式不同:
第一个参数一样,但是传递给函数的参数需要一个个单独列出
function sum(num1,num2){
return num1+num2;
}
function callSum(num1,num2){
return sum.call(this,num1,num2)
}
sum.callSum(10,10) //20
bind() //创建一个函数实例,有相同属性和方法,并更改指定执行环境对象
- bind()
拷贝,或者将多个对象结合
window.color = 'red';
var o = {color:'blue'};
function sayColor(){
alert(this.color)
}
sayColor() // 'red'
var copySayColor = sayColor.bind(o);
copySayColor() // 'blue'
5.6 基本包装类型
- 三个特殊的引用类型:Boolean / Number / String
- 基本类型可以调用方法是因为有隐式包装类型转换的过程
var s1 = 'some text';
var s2 = s1.substring(2); - 引用类型与基本包装类型主要的区别是对象的生存期,new创建的引用实例,在执行流离开当前作用域之前会一直保存在内存中,而包装类型执行完后会立即销毁
- 基本包装类型实例typeof为Object
typeOf(new Number(10)) //Object
typeOf(Number(10)) //number - Object实例会根据传入值的类型返回相应的包装类实例
new Object('some text') instanceof String //true
5.6.3 String类型
- 指定位置的字符:charAt( 0 )
- 部分字符截取:
slice(x,y) //0开始,y-1结束
substring(x,y)
substr(x,y) - 指定字符位置查找:
indexOf("x",0) //x字符,从0开始查找,默认从0
lastIndexOf("",0) - trim() 删除前后空格的字符
- split() 字符匹配分割成数组
let str = "red","blue","black";
str.splice(',') //["red","blue","black"]
5.7 单体内置对象
5.7.1Global对象
最外圈的全局对象,所有在全局作用域中定义的属性和方法都是Global的对象属性,
例如isNaN(),isFinite(),parseInt(),parseFloat()
- URI编码方法
encodeURI() //只对URI中的空格转义
encodeURIComponent() //对URI中的特殊字符转义
decodeURI()
deCodeURIComponent() - eval()
eval() 直接对字符串进行ECMAScript解析 - Global对象
所有全局的引用对象都是Global的属性 - window对象
提供了window对象,Global最外圈的属性方法,用window对象都能访问
另外,window对象还是浏览器对象模型,后面详细讲解。
5.7.2 Math对象
- min() / max()
Math.min(v1,v2,v3) / Math.max(v1,v2,v3) //求最大最小数 - 舍入方法
Math.ceil() //向上舍入
Math.floor() //四舍五入
Math.round() //向下舍入 - 随机
Math.random() // 0-1的随机数
parseInt(Math.random()*10+1) // 1-10随机数