目录
1.函数对象的方法 call、apply
通过函数对象来调用,调用方法时都会调用函数
可以将一个对象指定为第一个函数,这个函数会成为这个对象执行时的this
call()方法可以将实参在对象之后依次传递
apply()方法需要将实参封装到一个数组中统一传递
funtion fun(){
alert("..");
}
fun.apply();
fun.call();
根据函数调用方法不同,this会指向不同对象
- 函数形式调用,this是window
- 方法调用,this是调用方法的那个对象
- 当以构造函数形式调用时,this就是创建的函数
- call()、apply()方法调用时,this是指定的那个对象
2.argument
在调用函数时,浏览器每次都会传递进两个隐含参数
- 函数的上下文对象 this
- 封装实参的对象 argument(类数组对象)
argument可以通过索引操作数据,也可以获取长度
调用函数时,传递的实参都会在argument中保存,即使不定义形参也可以利用argument来使用实参
callee属性,对应一个当前正在执行的函数对象
3.Date对象
如果使用构造函数创造一个Date对象,会封装当前代码执行时间
创造一个指定时间对象,需要在构造函数中传递一个表示时间的字符串
var date = new Date("20/10/2020 23:10:20");
Date方法:
getDate()获取当前日期对象-日
getDay() 0~6星期
getMonth() 0~11月份
getFullyear() 年份
getTime()当前日期对象的时间戳-格林尼治时间至对象时间经过毫秒
计算机底层在保存时间时使用的都是时间戳
now()获取代码执行的当前时间戳-测试代码执行性能
4.Math
不是构造函数
工具类不用创建对象,封装数学运算相关属性和方法,可直接使用
Math.PI
Math.abs()取绝对值
Math.ceil()向上取整
Math.floor()向下取整
Math.round()对一个数四舍五入取整
Math.random()生成0-1之间的随机数
Math.round(Math.random()*(y-x))+x 生成x-y的随机数
Math.max()获取多个数中的最大值 min
Math.pow(x,y) 返回x的次幂
5.包装类
JS提供三个包装类,将基本数据类型转换为引用数据类型
String()将基本数据类型字符串转换为String对象
Number()
Boolean()
实际开发不使用包装类,不方便比较
方法、属性只能添加给对象,不能添加给基本数据类型
但我们对基本数据类型调用方法、属性时,系统会临时使用包装类把基本数据类型转换为对象
调用完以后将其转换为基本数据类型
字符串的方法String
var str = "hello world";
字符串在底层以字符数组形式保存
.length
属性获得长度
.charAt()
根据索引获取指定位置的字符
.charCodeAt()
获取指定位置字符的字符编码
.fromCharCode()
根据字符编码获取字符
.concat()
连接两个或多个字符串,返回新串
.indexOf()
检索一个字符串中是否含有指定内容,含有返回第一次出现索引,没有返回-1
可以指定第二个参数,表示开始查找的位置
.lastIndexOf()
类似于.indexOf(从前往后),但它是从后往前
.slice
(开始索引,结束索引)从字符串截取指定位置,不会影响原字符串
前闭后开,可以传负数参
.substring()
截取字符串类似.slice(),但不能接受负值,且会自动调整参数位置
.substr()
截取字符串
.split()
将一个字符串拆分为一个新的数组
需要根据一个字符串参数来拆分数组
如果传递一个空串会将每一个字符都拆出
.toUpperCase()
将一个字符串转换为全部大写并返回新值
.toLowerCase()
6.正则表达式(对象)
用于定义一些字符串规则以检查字符串
或者将字符串中符合规则的内容提取出来
创建正则表达式
var 变量 = new RegExp("正则表达式","匹配模式");
var reg = new RegExp("a");//检查一个字符串中是否含有a
return.test(reg);
.test()检查字符串是否符合正则表达式的规则,返回布尔值
大小写敏感
第二个参数
i忽略大小写 g全局匹配模式
使用字面量创建正则表达式
var 变量 =/正则表达式/匹配模式
var reg = /a/i; //检查一个字符串中是否含有a
但构造函数比利用字面量更灵活
| [ ]表示或的关系
[a-z]任意小写字母 [A-Z]大 [A-z]任意字母
[^ ]除了
字符串和正则相关的方法
.split()
根据参数将一个字符串拆为一个数组,可以传入一个正则表达式,全局匹配
.search()
可以搜索字符串中是否含有指定内容,有返回第一出现索引,没有返回-1
可以传入一个正则表达式作为参数
默认情况下只能找到一个符合要求的内容,找到后终止检索
但设置正则表达式为全局匹配模式,会匹配到所有内容
可以为一个正则表达式设置多个匹配模式,且顺序无所谓
.match()
会将匹配的内容封装到一个数组中返回,即使只读到一个结果
正则表达式的语法
量词:一个内容出现的次数
只对前边的一个内容起作用
var reg = /a{3}/;
{n} ->出现n次
(m,n) ->出现m~n次数
{m,} ->m次以上
+至少一个,相当于{1,}
* 0个或多个,相当于{0,}
? 0个或1个,相当于{0,1}
^ 表示开头(^a 检查某字符串是否以a开头)
& 表示结尾(b& 检查某字符串是否以b结尾)
如果在正则表达式中同时使用^ & ->要求字符串完全符合正则表达式
var phoneStr = "13982358001";
var phoneReg = /^1[3-9][0-9]{9}&/;
console.log(phoneReg.test(phoneStr));
字面量中
.表示任意字符
\转义字符 -> \.表示.
ps.在构造函数中,由于它的参数是一个字符串,\属于字符串的转义字符
如果要使用\则需要用\\来代替 -> \\.
\w 任意字母、数字、_
\w 除了任意字母、数字、_
\d 任意数字[0-9]
\D 除了数字[0-9] ->[^0-9]
\s 空格
\S 除了空格
\b 单词边界 ->独立单词
\B 除了单词边界
eg.去除开头和结尾的空格
str = str.replace(/^\s*|\s*&/g,"");
eg.检查电子邮件
任意字母数字下划线 .任意字母数字下划线@ 任意字母数字 .任意字母(2-5位) .任意字母(2-5位)
var str = "hello world";
result = str.search(/a[bef]c/);
.replace(被替换内容,新的内容)可以将字符串中指定内容替换为新的内容