引用类型:
创建引用类型(类似于C中的类),下面这两种写法都是一样的:
var s = new Object();
s.init = function (){
}
var s = {
init: function(){
}
}
上面这两种写法是一样的,第二种简化
变量的访问方法,点和方括号都可以:
方括号的适用性更高:因为他可以使用动态变量、额外特殊字符、保留关键字、不存在变量之类。
不过除了上面几种特殊情况,比较建议使用点访问 。
Array类型:
创建数组对象:var s = new Array("1","2"); //这个创建时可以省略new的关键词的
exp:
var s = []
undefined
s[3]='name'
"name"
s
"name"
不存在的访问或者设置,补充undefined
判断某个对象是否是数组,你可能第一时间想到typeof和instanceof,但是,最好的使用为Array.isArray(obj)的方法
数组和string转化,常用的函数有join和splice,toString()之类
Array对象有一些常用的栈方法,满足栈方法的属性,先进后出,后进先出:
push(),array.push(val) //压入数组
pop(),array.pop() //取出数组最后一个元素
Array对象有一些常用的堆方法,满足堆方法的属性先进先出,后进后出:
shift(),array.shift() //取出数组第一个元素
unshift(), array.unshift(val,val...) //从头部推入数组:
Array重排序:
数组中存在reverse()和sort()两个排序方法: //这个排序是字典排序的 ,字符串的话, 10会在5之前
一个是正序,一个是倒叙
相应若要对json对象中某个属性排序,返回json对象,可以查看扩展
sort(function(){returnxx})
Contact()方法可以创建一个新的数组,吧两个数组连接起来:
Arr1.contact(Arr2)
Slice()则是拆分后形成数组:Slice(start, end)
Splice() 方法可以根据参数,完成删除,插入和替换的作用!!
indexOf() 判断数组中是否存在某个元素,返回位置,从数组头部开始查找
lastIndexOf()则是从数组尾部开始查找
迭代方法:
every(),filter(),forEach(),map(),some() //。。。。
//every保证每个元素都满足,some至少一个元素满足
//其他三个方法都是每个元素进行相应操作
这几个迭代方法,都不会修改副本中的值
reduce()和reduceRight()方法:一个从左到右,一个从右到左:
函数接受4个值:前一个值,当前值,索引,数组对象
var values =[1,2,3,4,5]
values.reduce(function(pre,cur, index, array){
})
//这个函数很有意思,用来做斐波那契数列就很简单了~
Date类型:
Date.parse() 。接受一个日期,返回相应的毫秒数
Date的valueof()返回的不是字符串,而是返回日期的毫秒表示。
对这个主要一些函数,获取年月日操作的函数之类..
RegExp类型:
创建一个正则表达式,类似于:var expression = /pattern /flags ;
g:表示全局模式,即全局匹配
i:表示不区分大小写。
m:多行匹配模式
var p = /[bc]at/i 匹配第一个bat,cat,不区分大小写。
推荐使用new RegExp
RegExp实例属性:
var p=/\[bc\]at/i
undefined
p.global //是否设置了g标志
false
p.ignoreCase //是否设置了i
true
p.lastIndex //搜索下一个匹配项的字符位置,从0算起
0
p.source //正则表达式的字符串表示
"\[bc\]at"
RegExp的实例方法主要是exec():
接受一个字符串,没有匹配返回null,返回值为匹配的字符串数组
设置全局标志g,每次exec都会往下去找,不设置,则每次都返回第一个匹配的元素!
test也是接受字符串:返回值值为true,false
var text ="cat,bat,dat"
undefined
var p = /.at/
undefined
p.test(text)
true
p.exec(text)
"cat"
p.exec(text)
"cat"
var p = /.at/g/
SyntaxError: Unexpected token }
var p = /.at/g
undefined
p.exec(text)
"cat"
p.exec(text)
"bat"
p.exec(text)
"dat"
p.exec(text)
null
p.exec(text)
"cat"
var text ="cat,bat,dat"
undefined
var p = /.at/
undefined
p.test(text)
true
p.exec(text)
"cat"
p.exec(text)
"cat"
var p = /.at/g
undefined
p.exec(text)
"cat"
p.exec(text)
"bat"
p.exec(text)
"dat"
p.exec(text)
null
p.exec(text)
"cat"
Function类型:
定义阶乘都需要用到递归算法:
function factorial(num ) {
if(num < = 1){return 1}
else {return num *arguments.callee(num-1)}
}
函数属性,length表示接受的传递参数个数
基本包装类:
var s1 ="test"
undefined
s1.color ="red"
"red"
s1.color
undefined
s1
"test"
原因是执行第二行创建的s1.color对象,在执行第三行代码的时候已经被销毁了。
String类型的对象,有一个Length的方法,可以 获取这个对象的长度。
charAt charCodeAt返回字符串相应位置的char字符或者字符编码,也可以使用string[1]这种方式访问
match和search函数均可接收字符串或正则表达式
localCompare()方法可以比较两个字符串
Math,和min和max用法:
var max =Math.max(1,2,3,4,5);
var min=Math.min(1,2,3,4,5);
但是,经常,我们要取值的是在一个数组中取到最大和最小的值。那么,这个时候apply函数就有很大的作用了!
var values =[1,2,3,4,5,6]
var max =Math.max.apply(Math, values);
Math.ceil()向上舍入,Math.floor()向下舍入,Math.round()四舍五入。
Math.random()在0和1之间取一个随机数。
常用的还有一些取绝对值,平方根,对数,幂等运算。