JavaScript原生对象总纲
一. javascript之Array类
创建js数组两种方式:
var arr = []; 或
var arr = new Array();
()里可以指定长度,也可以不指定,指不指定都无所谓,因为js里的数组长度是可变的
1.concat(arr1,arr2,arr3......arrx):
js数组合并,返回合并后的新数组,传递一个或多个数组,字符串都可以行,返回的都是一个合并的新数组(传的数组会先转成字符串再一个一个的传入进去)。
2. join():
将数组元素按指定的分隔符拼接成一字符串返回,默认分隔符为英文逗号;
var str=arr.join("连接符");
固定套路:
1. 字符数组拼接为单词:
var word=chars.join("");
强调: 1. join()==>String(arr)
2. 无缝拼接必须加""
2. 将单词拼接为英文句子:
var stmt=words.join(" ");
3. 将数组拼接为页面元素:
值的一说的是 将数组转为字符串有2种方法,一种是String(arr),另一种就是用arr.join()
3. slice(start,end): 截取
var subArr=arr.slice(starti,endi+1);
复制出arr中starti位置到endi位置的元素,组成新的子数组。强调:不改变原数组,只返回新的子数组。含头不含尾!
支持负数参数: arr.slice(-n,-m)
截取倒数第n个开始,到倒数第m个之前截止的元素。arr.slice(arr.length-n,arr.length-m);
5, splice(): 删除 插入 替换——直接修改原数组
删除: [var deletes=]arr.splice(starti,n)
删除arr中starti位置开始后的n个元素不必考虑含头不含尾,其实被删除的元素会组成新数组返回,如果被删除的元素还有用,可用变量接住返回值。
插入: arr.splice(starti,0,值1,值2,...)
将值1,值2,...插入到arr中starti位置,原starti位置及其之后的值向后挤压不支持数组参数:无法打散参数数组
替换: [var deletes=]
arr.splice(starti,n,值1,值2,...),删除arr中starti开始后的n个元素,再在starti位置,插入值1,值2。删除的元素个数和插入的新元素个数可以不相等。js会自动调整数组的容量。
4. sort(fn):
数组排序,默认是按英文字母的ASC码升序排列,比如apple排在orange前面,其实sort还可以接收一个参数,该参数function类型,有点类似于java里的比较器的意思,就是说如果不想按默认的比较规则来排序,就必须提供一比较函数,该函数有两个参数a、b,
如果返回值小于0,则a排在b前面
如果返回值大于0,则b排在a前面
如果返回值等于0,则a、b位置不变
5. pop():
删除数组的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。
如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
6. push(n1,n2,n3,....nx):
向数组末尾添加一个或多个元素,并返回添加后数组的长度,
注意,此方法操作的是原数组对象,不会创建副本。此方法可以接收多个参数,
至少要传递一个参数
7. reverse():
颠倒数组中元素的顺序,即如果原来数组元素是1,2,3,4,5,调用reverse()后,
元素顺序为5,4,3,2,1,注意,此方法直接操作的是原数组对象,不会创建副本。
8. shift():
删除数组的第一个元素,并返回它删除的那个元素
如果数组已经为空,则 shift() 不改变数组,并返回 undefined 值
注意,此方法直接操作的是原数组,不会创建副本对象
9. unshift(element1,.....,element):
向数组开头添加一个或多个元素,并返回添加后的数组长度。至少要传一个参数。
注意此方法是直接操作原数组,最后添加的元素index=0,以此类推。
二. js中Number类常用方法:
1. toFixed():
将数字四舍五入为指定小数位数的数字,参数值范围为[0,20],表示四舍五入后保留的小数位数,
如果没有传入参数,默认参数值等于0
2. toprecision():
用于将数字精确到指定长度,方法接收参数一个参数,参数的范围为[0,21]参数表示数字的位数,如果数字总位数大于参数值且数字是小数,那么会进行四舍五入,如果数字总位数小于参数值且数字是小数,那么多出的小数位会自动补零如果数字总位数小于参数值且数字为整数,那么会改用科学计数法表示
3. isNaN(num):
判断是否为数字,这个方法很有用
三. js中String类常用方法:
1, charAt(index):
用于返回指定位置的字符,index从0开始计算
2, charCodeAt(index):
用于返回指定字符的ASCII码
3, concat(element1,element2......elementx):
用于拼接两个或多个字符串
4, indexOf():
用于返回指定字符在字符串中第一次出现的索引,从第一个字符开始查找,找到立即返回。没有查找到目标会返回-1。
5, lastIndexOf():
用于返回指定字符在字符串中第一次出现的索引,不过是从最后面一个字符开始查找,没有查找到目标会返回-1。
6, match():
用于检索与指定正则匹配的子串,如果开启了全局检索模式,且有多个符合条件的子串,那么
返回的是一个数组。
7, replace():
用于字符串替换操作,接收两个参数。
第一个参数:表示待替换的字符串,或者是替换的正则表达式
第二个参数:替换文本,也可以是一个function的返回值
注意此方法不会改变原字符串对象,而是返回新字符串对象。
用function返回值作为替换文本时,function里有两个参数:
m表示前面第一个参数即正则匹配到的子串,第二个参数是该子串在原字符串中的索引位置
search():用于返回指定子串或符合指定正则表达式的子串在原字符串中第一次出现的索引,
如果没有找到,则返回-1
var str = "I like javascript."; alert(str.search("javascript"));
再次解释延伸
替换: str=str.replace(reg,"替换值");
将str中reg匹配的关键词替换为指定的"替换值"
强调: reg后加g,替换所有
不加g,仅替换第一个
完整版的replace:
str=str.replace(reg,function(kw){
//处理逻辑;
return "替换值";
})
其中,kw会自动获得每次找到的当前关键词
函数体中,可根据当前关键词,执行处理,最后返回对应的替换值
衍生功能:
删除关键词:str.replace(reg,"");
格式化: 2步:
1. 使用分组,将原字符串按照格式需要分割。
比如: 19831226
(\d{4})(\d{2})(\d{2})
1 2 3
强调: 在匹配时,每个分组都会自动获得一个序号:
2. 使用replace方法,在替换时,分别获得每个分组的内容,再拼接格式。
str.replace(reg,"$1年$2月$3日");
其中:$n会自动匹配第n个分组的子字符串
8, slice(start,end):
用于截取start,end指定区间内的字符串并返回,此方法不会操作原字符串对象数据,而是创建字符串副本保存截取后的字符串数据如果end未指定,则表示直接从start直到数组末尾,如果start或end为负数,表示从后面开始算起,比如-1,表示从倒数第一个元素算起,以此类推。截取的区间范围是[start,end),前闭后开区间,且start必须小于end如果没找到一个元素,则返回一个空字符串
9, substr():
用于字符串截取,方法接收两个参数,第一个参数start,表示从start索引位置开始截取,索引从0开始计算,如果此参数值是负数,则会从字符串结尾开始计算,比如-1表示最后一个字符,-2表示倒数第二个字符,以此类推。第二个参数length,表示截取的字符串长度,此参数为可选,如不指定此参数,则默认会一直截取到字符串结尾。
注意:此方法已不建议使用
var str = "I like javascript!"; alert(str.substr(7,10));
10, substring():
用于截取start与end索引区间内的字符串,区间范围为[start,end],前闭后开注意:参数start和end必须为非负整数,如start为负数,则默认会将start赋值为0,如end为负数,则默认会将end赋值为0,且截取区间改为[0,start)。如果start大于end,那么会首先交换两个参数值的位置,即区间改为[end,start)
var str1 = "I like javascript!": alert(str1.substring(7,18)); var str2 = "I like javascript!"; alert(str2.substring(3,-3));
注意的是8,9,10这3个API都是一个功能只是参数意义不同,用得最多的是slice(start,end),现在substr()基本没人用了,substring()看个人习惯使用
11, toLowerCase():
把字符串转换成小写
12, toUpperCase():
把字符串转换成大写
13, split("分隔符"):切割
var subs=str.split("分隔符")
str.split(reg)
返回值: 包含切割后所有子字符串的数组,在返回的数组中,不再包含分隔符。
何时使用: 今后,只要分段处理字符串时都要先切割,再分段处理每个字字符串
最后再拼接起来。
固定套路:
1. 将字符串,打散成字符数组:
var chars=str.split("");
2. 将英文的句子打散成单词:
var words=stmt.split(" ");
3. 将页面元素的内容,切割为子数组(这就是怎么将字符串变成数组的方法)
有个发现string和array中有2个API是这两种类型都可以用的,concat()和slice() ,实质这2API是数组中的API,为什么字符串可以用,是这2个方法不改变原来数组的值,这一特性符合字符串的特性(只读字符,用API原字符串值不会变),
四. js中Date对象常用 方法:
getDate():返回一个月中的某一天,返回值范围:1-31
getDay():返回一周中的第几天也就是星期几,返回值范围:0-6,0表示星期天,6表示星期六
getMonth():返回日期中的月份数字,返回值范围:0-11,0表示1月,11表示12月,这个有点变态
getFullYear():返回日期中的年份数字,用4位数字表示而不是2位数字的缩写形式
getHours():返回小时数,返回值范围:0-23
getMinutes():返回分钟数:返回值范围:0 -59
getSeconds():返回秒数,返回值范围:0-59
getMilliseconds():返回毫秒数,返回值范围:0-999,这个方法命名我表示不能理解,为何Seconds首字母不大写?
getTime():返回指定的日期距1970年1月 1日00:00:00之间的毫秒数。
parse(): 用于将符合规定的日期字符串转换成日期,并返回该日期至1970-01-01的毫秒数
注意:此方法是静态方法,不用能用Date对象调用,而应该使用Date类调用。
//var date = Date.parse("1987-06-05"); //火狐OK,IE不OK
parse方法接收的日期字符串格式比较兼容的格式为:
yyyy/MM/dd
yyyy/m/d
MM/dd/yyyy
M/d/yyyy
yyyy/MM/dd HH:mm:ss
yyyy/m/d HH:mm:ss
MM/dd/yyyy HH:mm:ss
M/d/yyyy HH:mm:ss
setDate():设置一个月中的某一天,取值范围:1-31
setDay():设置一周中的第几天也就是星期几,取值范围:0-6,0表示星期天,6表示星期六
setMonth():设置日期中的月份数字,取值范围:0-11,0表示1月,11表示12月,这个有点变态
setFullYear():设置日期中的年份数字,用4位数字表示而不是2位数字的缩写形式
setHours():设置小时数,取值范围:0-23
setMinutes():设置分钟数:取值范围:0 -59
setSeconds():设置秒数,取值范围:0-59
setMilliseconds():设置毫秒数,取值范围:0-999,这个方法命名我表示不能理解,为何Seconds首字母不大写?
setTime():设置指定的日期距1970年1月 1日00:00:00之间的毫秒数。
toString():将Date对象转换成字符串形式,默认是格林威治标准时间格式即GMT格式
toTimeString():将Date对象的时间部分转成字符串形式,GMT格式
toDateString():将Date对象的日期部分转成字符串形式,GMT格式
toLocaleString:根据本地语言的日期规则表示,中文下是yyyy年MM月dd日 hh:mm:ss
Date.UTC(year,month,day,hours,minutes,seconds,ms):
此方法用于根据世界时返回距离1970-01-01的毫秒数,前3个参数是必须的,其余参数是可选的,
分别表示年、月、日、小时、分钟、秒、毫秒,
此方法返回的毫秒数可以传递给Date()构造函数,
Date对象的toString方法默认是转换成GMT格式,对于我们来说,不适用,我们往往希望显示为yyyy-MM-dd hh:mm:ss格式,
Date原生对象没有提供这个功能,只好自己扩展了,
五, js中的Math类:
注意此类是静态类,不能通过构造函数创建实例的,所以提供的方法都是静态方法,直接通过类名调用,不能加new
1, abs():
获取数字的绝对值,如果提供的参数是字符串,则会首先尝试将其转换成数字,如果不能
转成数字,则直接返回NaN,如果能,则返回其绝对值。
2, ceil():
对传入的参数进行向上取整计算,如果传入的不是数字,则会尝试将其进行数字转换,
不能转换则之间则直接返回NaN
3, floor():
对传入参数进行向下取整计算,如果传入的不是数字,则会尝试将其进行数字转换,
不能转换则之间则直接返回NaN
4, max(x1,x2,x3.....xn):
返回指定参数中的最大值,如果指定参数中有一个不能转换成数字,则直接
返回NaN,如果没有传入参数,则返回负无穷大
5, min(x1,x2,x3.....xn):
返回指定参数中的最小值,如果指定参数中有一个不能转换成数字,则直接
返回NaN,如果没有传入参数,则返回正无穷大
6, pow(x,y):
返回x 的 y 次幂,如果计算结果是负数,则返回NaN,如果由于计算结果太大,导致浮点溢出,
则返回正无穷大
7, random():
返回0 ~ 1 之间的一个随机数,包含0不包含1。
8, round(x):
与 x 最接近的整数。如果x是正数,那么0.5会转成1,如果是-0.5,那么会舍掉,
-0.50001才会转成-1
9, sqrt(x):
返回一个数的平方根,如果 x 小于 0,则返回 NaN,如果传入的不是数字,则会尝试将其进行数字转换,
不能转换则之间则直接返回NaN
六, js的RegExp正则对象:
创建正则对象两种方式:
1. 直接量:var reg=/正则/ig;
何时使用: 只有正则是固定的,不需要动态生成时,就用直接量创建
禁忌: /之间不允许包含"/"字符,如果必须包含,应转义为\/。如/\d{6}/
2. 用new关键字:
var reg=new RegExp("正则","ig");
何时使用: 只要正则表达式需要动态生成时,都要用new创建。
禁忌: ""中只要包含\,",'都要用\转义。
详细解释
1. 正则表达式
什么是: 专门规定字符串中字符出现规律的表达式
何时使用: 查找 替换 验证
如何使用:
1.最简单的正则表达式就是关键词的原文
2.字符集: 规定字符串中某*一位*字符备选字符列表的规则。
如何使用:[备选字符列表]
特殊:
1. 如果备选字符列表中包含部分unicode练习的字符,可用-省略中间的字符:
比如: 匹配1位大写字母: [A-Z]
1位数字:[0-9]
1位小写字母:[a-z]
1位字母:[A-Za-z]
1位汉字:[\u4e00-\u9fa5]
2. 表示除xxx之外都行:
[^47] 除了4和7之外都行
3. 预定义字符集: 对常用字符集的简化
1位数字: \d ==>[0-9]
1位字母,数字或_:
\w ==>[a-zA-Z0-9_]
1位空字符: \s 空格,制表符,换行
1位任意字符: . 除换行外,一切字符
4. 量词: 专门规定字符集出现次数的规则
如何使用: 用于一个字符集之后,修改前一个相邻字符出现的次数
有明确数量:
{n,m} 至少n次,最多m次
{n,} 至少n次,多了不限
{n} 必须n次,不能多也不能少
不明确数量:
? 可有可无,最多1次
* 可有可无,多了不限
+ 至少1次,多了不限
5. 选择和分组:
选择: 或 | 在两个表达式中二选一匹配
分组: 将多个字符集用(),标记为一组
何时使用: 希望一个量词同时修饰多个字符集时,就要将多个字符集先分组。
手机号:
+86或0086 可有可无,最多1次
空字符 至少一个,多了不限
1
在3,4,5,7,8之中挑一个
9位数字
(\+86|0086)?\s+1[34578]\d{9}
6. 指定匹配位置:
字符串开头: ^ 比如: 开头的空字符
字符串结尾: $ 比如: 结尾的空字符
固定套路:
如果希望从头到尾必须完整匹配时,就要同时前加^,后加$——验证
例外:^\s+|\s+$ 不是从头到尾完整匹配
因为|优先级最低,到时正则被一分为二
单词的边界: \b
实例
需求: 密码强度验证
6~8位,字母,数字的组合,至少包含一位大写字母和一位数字
预判: 在正式匹配之前,先浏览整个表达式,是否符合指定的规则
(?规则$)
1. 预判从头到尾不全由字母组成:
说明: 至少包含一位数字或特殊符号
(?![a-zA-Z]+$)
2. 预判从头到尾不全由数字和小写字母组成
说明: 至少包含一位大写字母或特殊符号
(?![a-z0-9]+$)
3. 必须是6~8位字母和数字的组合
^(?![a-zA-Z]+$)(?![a-z0-9]+$)[a-zA-Z0-9]{6,8}$
正则表达式:2种模式:
贪婪模式: 默认正则表达式匹配最长的符合条件的字符串
懒惰模式: 让正则表达式仅匹配最短的符合条件的子字符串
贪婪改懒惰:.*->.*? .+->.+?
验证API: 检查一段字符串是否和正则表达式完全匹配。
如何验证: var bool=reg.test(str);
检查str是否和reg完全匹配,如果验证通过,返回true,否则返回false。
强调: 验证功能中,正则表达式必须前加^,后加$。如果不加,只要部分匹配,就为true。不用加g后缀,因为只匹配一次。