1、call( )和apply( )
函数对象的方法
call() 和 apply()
这两个都是函数对象的方法,需要通过函数对象来调用
当对函数调用call() 和 apply() 都会调用函数执行
在调用call() 和 apply()可以将一个对象指定为一个参数
此时这个对象将会成为函数执行时的this
call方法可以将实参在对象后依次传递
apply 方法需要将实参封装到数组中统一传递
function fun(a,b){ // alert(this); console.log(a); console.log(b); } // fun.call(obj,2,3); fun.apply(obj,[2,3]); // fun.call(); // fun.apply(); // fun(); var obj={name:"obj"}; var obj2={name:"obj2"}; // fun.call(obj);
2、arguments
在调用函数时浏览器每次都会传递两个隐含的参数
1、函数上下文对象this
2、封装实参的对象arguments
arguments是一个类数组对象,他也可以通过索引来操作数据,也可以获取长度
在调用函数时,我们传递的实参会封装到arguments(在arguments中保存)
arguments.length可以获取实参的长度
我们即使不定义形参也可以通过arguments来使用实参
只不过比较麻烦
arguments[0]表示第一个实参
arguments它有一个属性叫callee这个属性对应一个函数对象
就是当前正在执行的函数对象
3、date对象 在js中使用date对象来表示时间
1、创建一个date对象
如果直接使用构造函数创建一个Date对象,则会封装当前函数执行时间
2、创建一个指定的时间对象
需要在构造函数中传递一个时间的字符串作为参数
日期的格式 月份/日/年 时:分:秒
var d2=new Date("06/01/2022 12:00:00");
3、相关函数
getDate()
获取当前日期是几号
getDay()
获取当前日期对象是周几
会返回0-6的值 0表示周日
getMonth()
获取当前日期的月份
会返回0-11 0表示一月份
getFullYear( ) 获取当前日期的年份
getTime()
获取当前日期对象的时间戳、
时间戳 指的是从格林威治标准时间的1970年1月1日0时0分0秒
到当前日期所花费的毫秒数(一秒等于一千毫秒)
计算机底层在保存时间时使用的都是时间戳
4、math
math和其他的对象不同但是他不是一个构造函数
它属于一个工具类不用创建对象,它里面封装了数学运算的属性和方法
例: Math.PI表示圆周率
abs()可以用来计算一个数的绝对值
Math.ceil()可以对一个数进行上取整,小数位只要有值就向上进一
Math.floor()可以对一个数字进行向下取整,小数部分会被舍弃
Math.round()可以对数字进行四舍五入取整
Math.random()用来生成一个0-1之间的随机数
生成一个0-10的随机数
生成一个0-x之间的随机数
Math.round(Math.random()*x)
max()可以获取多个数字中的最大值
min()可以获取多个数字中的最小值
Math.pow()返回x的y次幂
Math.sqrt()求平方根
5、包装类
基本数据类型
string number null boolean undefined
引用数据类型
object
在js中为我们提供了三个包装类,通过这三个包装类我们可以将基本数据类型转换为对象
1、String()
将一个基本数据类型的字符串转换为string对象
2、Boolean()
将一个基本数据类型的布尔值转换为boolean对象
3、Number()
可以将一个基本数据类型的数字转换为number对象
注意:我们在开发中基本不会用基本数据类型的对象
如果使用基本数据类型的对象做比较时可能有一些不可预料的结果
注:方法和属性只能添加给对象,不能添加给基本数据类型,当我们对基本数据类型的值去调用属性和方法时, 浏览器会临时使用包装类将其转换为对象,然后在调用对象的属性和方法,调用完之后在将其转换为基本数据类型。
6、字符串的方法 在计算机底层字符串是以字符数组保存的
1)length属性 可以用来获取字符串的长度
var str="hello h";
console.log(str.length);
// 7
2)charAt() 可以返回字符串中指定位置的字符,根据索引获取指定字符
var str="hello h";
var result=str.charAt(0);
console.log(result);
// 结果 h
3) charCodeAt() 用来获取指定位置字符的Unicode编码
var str="hello h";
result=str.charCodeAt(0);
console.log(result);
//结果 104
4) String.fromcharCode() 可以根据字符编码获取字符
var str="hello h";
result=String.fromCharCode(72);
console.log(result);
//结果 H
5) concat() 可以用来连接两个字符串,作用和 + 一样
var str="hello h";
result=str.concat("world");
console.log(result);
//结果 hello hworld
6) indexOf() 该方法可以检索一个字符串中是否含有指定内容, 如果字符串中含有该内容则会返回其第一次出现位置的索引,如果字符串中不含有则返回-1,可以指定第二个参数,指定查找开始位置
var str="hello h";
result=str.indexOf("h",1);
console.log(result);
//结果 6
7) lastindexOf() 该方法用法的indexof一样,但是indexof是从前往后找,而lastindexof是从后往前找, 可以指定第二个参数,指定查找开始位置
var str="hello h";
result=str.lastIndexOf("h",5);
console.log(result);
// 结果 0
8) slice()
* 从字符串中截取指定内容
* 不会影响原字符串,而是将截取到的内容返回
* 参数
* 第一个开始位置的索引(包括开始)
* 第二个结束位置的索引(不包括结尾)
* 如果忽略第二个参数则截取第一个参数后所有的
* 也可以传递一个负数
str="abcdefghijk";
result=str.slice(0,2)
console.log(result);
//结果 ab
9) subString()
* 可以用来截取字符串和slice类似
* 参数
* 第一个开始位置的索引(包括开始)
* 第二个结束位置的索引(不包括结尾)
* 不同的是 这个方法不能接收负值,如果传递负值默认为0
* 它会自动调整参数位置,如果第二个参数小于第一个则自动交换
var str="abdrfhjk";
result=str.substring(1,2);
console.log(result);
//结果 b
10)subStr()
* 用来截取字符串
* 参数
* 第一个截取开始位置索引
* 第二个截取数量
* 对原字符串无影响
str="abcdefg";
result=str.substr(0,2);
console.log(result);
//结果 ab
11)split()
* 将一个字符串拆分为一个数组
* 需要一个字符串作为参数,将会根据字符串去拆分数组
* 将空格作为参数传入,则会将每个字符都拆分为字符中的元素
str="abc,dcd,efg,dfg";
result=str.split(",");
console.log(result);
12)toLowerCase() 可以将字符串转换为小写并返回不会影响原字符串
str="abcdefg";
result=str.toLowerCase();
console.log(result);
//结果 abcdefg
13)toUpperCase() 可以将字符串转换为大写并返回不会影响原字符串
str="abcdefg";
result=str.toUpperCase();
console.log(result);
// 结果 ABCDEFG
7、正则表达式
正则表达式用于定义一些字符串的规则
计算机可以根据正则表达式来检查一个字符串是否符合规则
获取字符串中符合规则的内容提取出来
//创建正则表达式的对象
/*
* 语法:
* var 变量=new RegExp("正则表达式","匹配模式");
*
* 使用typeof检查返回object
*
* 这个正则表达式检查字符串里是否含有a
*
* 在构造函数中可以传递一个匹配模式作为第二个参数
* 可以是
* i 忽略大小写
* g 全局匹配模式
*/
var reg=new RegExp("a","i");
// console.log(typeof reg);
* 正则表达式的方法
* test()
* 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则、
* 符合返回true,不符合返回false
1、使用字面量来创建正则表达式
* 正则语法
* var 变量=/正则表达式/匹配模式
* 使用字面量创建的方式更加简单
* 使用构造函数创建的方式更加灵活
注:[ ]中括号里的关系也是或的关系
[ab]==a|b
[a-z]表示任意的小写字母
[A-Z]表示任意的大写字母
[A-z]表示任意字母
[0-9]表示任意数字
[^ ] ^表示除了都行
2、字符串与正则表达式相关方法
1)split()
将一个字符串拆分为一个数组, 需要一个字符串作为参数,将会根据字符串去拆分数组,将空格作为参数传入,则会将每个字符都拆分为字符中的元素
方法中可以传递一个正则表达式作为参数,这样的方法会根据正则表达式去拆分字符串
这个方法即使不指定全局也会全部拆分
var str="1a2b3c4";
var result=str.split(/[A-z]/);
console.log(result);
2)search()
搜索字符串中是否含有指定内容,如果含有则返回第一次出现内容的索引,如果不含有则返回-1
它可以接收一个正则表达式作为参数,然后会根据正则表达式去检测字符串
因为只会查找第一个,所以即使设置全局匹配也没用
var str="1a2b3c4";
var result=str.search("a");
console.log(result);
//结果 1
3)match()
可以根据正则表达式将一个字符串中符合条件的内容提取出来
默认情况下match只会找到第一个符合要求的内容,找到之后就停止检测
我们可以设置正则表达式为全局匹配模式,这
就会匹配到全部内容
可以为一个正则表达式设置多个匹配模式且顺序无所谓
ig既全局又忽略大小写
match会将匹配到底的内容封装到一个数组中返回即使匹配内容只有一个
str="1a2b3c4";
result=str.match(/[A-z]/ig);
console.log(result);
4)replace()
可以将字符串中指定内容替换为新的内容
参数:
1、被替换掉的内容,可以接收一个正则表达式
2、新的内容
默认只会替换第一个
str="1a2b3c4";
result=str.replace(/[A-z]/gi," ");
console.log(result);
3、正则表达式语法
1)量词
通过量词可以设置一个内容出现的次数
量词只对它前面的一个内容起作用
{n} 正好出现n次
{m,n} 出现m-n次,n不写表示m次以上
+ 至少一个,相当于{1,}
* 有没有都成,相当于{0,}
? 0个或1个,相当于{0,1}
正则表达式的开头与结尾
- ^ 表示开头
- $ 表示结尾
如果在正则表达式中同时使用 ^ $ 表示要完全符合正则表达式
2) 特殊
检查一个字符串中是否含有 .
. 表示任意字符
在正则表达式中使用\作为转义字符
用 \. 表示 .
用 \\ 表示 \
注意使用构造函数时,由于他的参数是一个字符串,而\是字符串的转义字符
如果需要使用\就要使用\\来代替
如果需要使用\\就用\\\\来代替
除此之外:
\w 任意字母,数字, _
\W 除了字母,数字,_
\d 任意数字[0-9]
\D 除了数字[^0-9]
\s 空格
\S 除了空格 纯空格
\b 单词边界
\B 除了单词边界