JS总结
js函数
立即执行函数
函数执行完立即被调用,且只执行一次
(function(a,b){
alert("我是一个匿名函数~~~")
})(a,b);
js方法
与java的对象创建和方法类似
var obj = new Object();
obj.name = "ss";
obj.sayName = function(){
};
var obj2 = {
name : "ss";
sayName: function(){
};
};
对象的属性可以是基本数据类型或函数(这个函数成为这个对象的方法)
js函数作用域
全局作用域合函数作用域:
变量声明提前
在函数中不使用 var 声明的变量提升为全局变量
js this
函数默认参数,理解为上一层对象的指针
通过工厂方法创建对象
工厂方法就是通过函数创建对象,函数封装了创建对象的过程。
这是一种通过函数创建对象的方法,函数封装了对象的创建过程,创建新对象时只需要调用该函数即可。这种方法适合于一次创建多个对象。
//对象的创建函数
function createStoreObject(name,location,salesVolume) {
var store = new Object();
store.name = name;
store.locaion = location;
store.salesVolume = salesVolume;
store.display = function() {
console.log(this.name);
};
return store;}//利用该函数创建一个对象
var store1 = createStoreObject("panda express","No.1,People Street",200000);
这样就创建了一个名为store1
的对象,注意这个对象除了属性之外还有一个方法display
。要创建更多的类似store1
的对象,直接调用该函数即可。
使用构造函数创建对象
上面虽然也是通过函数创建对象,但不是构造函数,只是普通函数。构造函数名必须以大写字母开头,函数体内没有返回语句。
//构造函数
function Store(name,location,salesVolume) {
this.name = name;
this.locaion = location;
this.salesVolume = salesVolume;}
//创建对象的实例
var myStore = new Store("KeyExp","No.1,L.Street",540000);
上面的代码首先是Store
对象的构造函数,然后用该构造函数创建了Store
对象的一个实例myStore
。
数组
数组的遍历
-
forEach()
使用
forEach()
方法forEach()
方法的参数是一个无名字的函数,函数有三个参数,第一个参数是当前的数组元素,第二个参数是当前的索引,第三个参数是数组对象的索引。与for
循环的区别是无法用break
中断循环。
var numArr = [10,11,12,13,14];
numArr.forEach(function(mem,i,arr) {
mem *= 10;
arr[i] = mem;});
console.log(numArr);//输出[100,110,120,130,140]
查找元素的位置
根据值查找元素的位置,有两个方法:indexOf()
和lastIndexOf()
,前者从索引小处往大搜索,后者相反。都返回第一次遇到该元素时的索引。
两者都有两个参数,第一个参数为要查找的元素,第二个参数可选,为搜索的起点索引。如:
var search = ["a","b","a","b","c","d","a","a","b","a"];
console.log(search.indexOf("a"));//输出0
console.log(search.lastIndexOf("a"));//输出9
console.log(search.indexOf("a",2));//输出2,从索引为2处开始搜索
第二个参数可以是负数,-1
表示倒数第一个元素,-2
表示倒数第二个元素,依次类推。如:
var search = ["a","b","a","b"];
console.log(search.indexOf("a",-3));//输出2
console.log(search.lastIndexOf("a",-3));//输出0
数组的合并
concat()
实现数组合并,其形式是数组a.concat(数组b)
,合并之后返回新数组,新数组为数组a
后面连接数组b
,但是数组a
和b
不变。
var a = [1,2,3];
var b = [4,5,6];
var c = a.concat(b);//合并后返回新数组
console.log(c);//输出[1,2,3,4,5,6]
数组倒置
reverse()
实现数组倒置,无参数,返回倒置后的数组,同时调用该方法的数组也会被倒置。称为就地逆置。
var a = [1,2,3,4];
var b = a.reverse();
console.log(a);//输出[4,3,2,1]
console.log(b);//输出[4,3,2,1]
元素合并
join()
将数组的所有元素连接起来组成字符串,参数为元素之间的分隔符,默认逗号。
var sArray = ["June","July","August"];
console.log(sArray.join());//输出June,July,August
console.log(sArray.join("+"));//输出June+July+August
元素排序
sort()
实现数据元素排序,不带该参数表示元素按照ASCII
表从小到大排序(参考JavaScript
学习手册三)。如:
var stringArray = ["a","ab","b","aa"];
stringArray.sort();
console.log(stringArray);//输出["a","aa","ab","b"]
需要注意的是数字的排序,例子如下:
var arr = [1,2,10,5,12];
arr.sort();
console.log(arr);//输出[1,10,12,2,5];
带参数的格式如下:
arr.sort(function(a,b){
return a-b; //升序排列
})
或者:
arr.sort(function(a,b){
return b-a; //降序排列
})
说明:
arr
是要排序的数组;a
,b
是两个参数,返回a-b
,升序排列,返回b-a
,降序排列。
对于数字的排序,sort()
带参数和不带参数是不一样的,例子如下:
var arr = [1,2,10,5,12];
arr.sort();
console.log(arr);//输出[1,10,12,2,5]
arr.sort(function(a,b){
return a-b;
});
console.log(arr);//输出[1,2,5,10,12]
提取子数组
slice()
返回切割出的子数组,不修改原来的数组。
它有两个整数参数a
和b
,a
表示切割的起点,该点属于子数组;b
可选,表示切割的终点,该点不属于子数组。
a
和b
都可以为负数,如-1
表示倒数第一个位置,依次类推。
var arr = ["a","b","c","d","e"];
console.log(arr.slice(0,3));//["a","b","c"]
console.log(arr.slice(0,-2));//["a","b","c"]
console.log(arr.slice(4));//["e"]
console.log(arr.slice(-4));//["b","c","d","e"]
正则表达式
正则表达式的定义
正则表达式:能够定义一类具有相同特征的字符串的式子。
使用//符号定义
用//
符号创建正则表达式:
var easyPattern = /s$/;
常用的特殊符号:
字符 | 匹配 |
---|---|
\n | 换行符 |
\f | 换页符 |
\t | 制表符 |
\v | 垂直制表符 |
\r | 回车符 |
比如选择题的答案只能是ABCD
中的任何一个。正则表达式用字符类来实现,字符类被放在中括号之内。[ABCD]
表示一个字符类,它和A、B、C、D
中的任何一个都匹配。
还可以用[A-D]
表示上面的字符类,中间的-
表示A
到D
之间的所有字符。
var lowerCharPattern = /[a-z]/;//匹配任意小写字母
var upperCharPattern = /[A-Z]/;//匹配任意大写字母
var numberPattern = /[0-9]/;//匹配任意数字
var mixPattern = /[a-zA-Z0-9]/;//匹配大小写字母,数字
var epattern = /[a-zA-Z];//匹配大小写字母
在中括号内最前面加上^
符号表示反向匹配:匹配和中括号内的正则表达式不匹配的所有字符,比如:
var notNumberPattern = /[^0-9]/;
notNumberPattern.test("123");//false
notNumberPattern.test("ahc");//true
[^0-9]
匹配的是任意非数字的字符。其中^
符号一定要在中括号内排在最前面。
字符类第二种表示
字符类还有一种较为简单的表示方法,比如\d
和[0-9]
的含义相同:表示任意的数字。下面用表格列出:
字符 | 匹配 | 等价于 |
---|---|---|
\w | 大小写字符或数字 | [a-zA-Z0-9] |
\W | 非字母,非数字 | [^a-zA-Z0-9] |
\d | 数字 | [0-9] |
\D | 非数字 | [^0-9] |
上面的内容都是单独的一个字面量或者字符类,对于稍微复杂一点的,比如一个数字后面紧跟着一个小写字母,该怎么表示呢?来看一个例子:
//表示数字后面紧跟着一个小写字母
var pattern = /[0-9][a-z]/;
pattern.test("1a");//true
pattern.test("11a");//true
pattern.test("a1");//false
从上面可以看出,表示数字的正则表达式[0-9]
和表示小写字母的正则表达式[a-z]
直接连接起来,即表示数字后面紧跟小写字母。其他的字符串字面量或者字符类也可以用这种方式。
重复匹配
表达式 | 匹配 | 等价于 |
---|---|---|
{a,b} | 至少出现a次,最多出现b次 | |
{a,} | 至少出现a次 | |
{a} | 出现a次 | {a,a} |
+ | 最少出现一次 | {1,} |
? | 出现一次或者不出现 | {0,1} |
* | 至少出现0次 | {0,} |
选择
“|”符号用于选择
JSON
JSON
对象是一种文本数据的交换格式,用于存储和传输数据。示例如下:
{"name":"Jerry", "age":15}
- 在
JavaScript
中定义一个JSON
对象:
var jsonObject = {"name":"js","number":2};
-
操作属性,使用
.
或者[]
:console.log(jsonObject.name);//读属性,输出js console.log(jsonObject["name"]);//读属性,输出js jsonObject.name = "javascript";//写属性,给name属性赋值javascript
-
删除属性,使用
delete
:var jsonObject = {"name":"js","number":2}; delete jsonObject.name;//删除name属性
-
遍历属性,使用
for-in
循环:var jsonObject = {"name":"js","number":2}; for(att in jsonObject) { console.log(jsonObject[att]);//依次输出js、2 }
在实际的传输过程中是以json字符串传递的
JSON
字符串就是在JSON
对象两边套上'
形成的字符串
JSON字符串到JavaScript对象
JSON.parse(a,b)
方法将JSON
字符串a
转换为JavaScript
对象。b
是一个可选的函数参数。
var JSONString1 = '{"k1":"v1","k2":"v2"}';
console.log(JSON.parse(JSONString1));//输出Object {k1: "v1", k2: "v2"}
JSON对象转换为JSON字符串
JSON.stringify(a,b,c)
,a
是待转换的JSON
对象,b
和c
为可选参数。
var JSONObject = {"k1":"v1","k2":"v2"};JSON.stringify(JSONObject);//JSON对象转换为JSON字符串
常用类
math类
常用的数
一些常用的无理数的表示方法:
表示 | 意义 | 约等于 |
---|---|---|
Math.E | e | 2.718 |
Math.PI | 圆周率 | 3.14 |
Math.SQRT2 | 2的平方根 | 1.414 |
Math.LN2 | 2的自然对数 | 0.693 |
向上取整
Math.ceil(x)
实现向上取整,返回大于等于x
且离x
最近的整数。
向下取整
Math.floor(x)
返回小于等于x
且离x
最近的整数。
随机数
Math.random()
返回0
到1
之间的一个随机数,包含0
不包含1
。
平方根
Math.sqrt(x)
返回x
的平方根。
四舍五入
Math.round(x)
返回x
四舍五入后的整数。
求最值
Math.max(x1,x2,....xn)
返回参数的最大值,参数个数不限;
Math.min(x1,x2,....xn)
返回参数的最小值;
求数组最大值的时候可以用Math.max.apply(Math,数组)
其余方法
Math
还有很多的方法
方法 | 作用 |
---|---|
Math.abs(x) | 求x的绝对值 |
Math.pow(x,y) | 计算x的y次幂 |
Math.exp(x) | e的x次方 |
Math.log(x) | x以e为底的对数 |
Math.sin(x) | x的正弦 |
Math.cos(x) | x的余弦 |
Math.tan(x) | x的正切 |
Math.asin(x) | x的反正弦 |
Math.acos(x) | x的反余弦 |
Math.atan(x) | x的反正切(-PI/2到PI/2之间) |
Math.atan2(y,x) | x轴到点(x,y)的角度 (-PI/2到PI/2之间) |
Date类
方法 | 作用 | 参数或者结果的范围 |
---|---|---|
getHours() | 获取小时 | 0~23 |
setHours(hour,min,sec,millsec) | 设置小时 | 0 |
getMinutes() | 获取分钟 | 0~59 |
setMinutes(min,sec,millsec) | 设置分钟 | 0 |
getSeconds() | 获取秒钟 | 0~59 |
setSeconds(sec,millsec) | 设置秒钟 | 0 |
getMillSeconds() | 获取毫秒数 | 0~999 |
setMillSeconds(millsec) | 设置毫秒数 | 0~999 |
getTime() | 获取距1970年1月1日8时0分0秒的毫秒数 | 大于等于0 |
setTime(millsec) | 设置距1970年1月1日8时0分0秒的毫秒数 | 大于等于0 |
getFullYear() | 获取年份 | |
setFullYear(year,month,day) | 设置年份 | month 和day 可选; |
getMonth() | 获取月份 | 在0 (一月)到11 (十二月)之间 |
setMonth(month,day) | 设置月份 | 0 表示一月。1 表示二月,依次类推,day 可选 |
getDate() | 获取在一个月的第几天 | 1-31 |
getDay() | 获取在一个星期的第几天 | 0 -6 , 0为周日 |