文章目录
内建函数的方法
call() 和 apply()
-
都是函数对象的方法,需要通过函数对象来调用
-
当对函数调用call()和apply()都会调用函数执行
-
在调用call()和apply()可以将一个对象指定为第一个参数,此时这个参数将会成为函数执行时的this(修改上文对象)
-
call() 方法可以将实参在对象之后作为传递
-
apply() 方法需要将实参封装到一个数组中同一传递
-
function fun(a,b){ console.log(a); console.log(b); alert(this.name); } obj = { name:'bob' say:function(){ alert(this); } }; obj2 = { name:'tom', say:function(){ alert(this); } } fun(); // window fun.call(obj); fun.apply(obj); obj.say.apply(obj2); // obj2 fun.call(obj,2,3)
-
总结this的情况:
- 1.以函数形式调用时,this永远都是window
- 2.以方法的形式调用时,this是调用方法的对象
- 3.以构造函数的形式调用时,this是新创建的那个对象
- 4.使用call和apply调用时,this是指定的那个对象
arguments
- 在调用函数时,浏览器每次都会传递两个隐含的参数
- 1.函数的上下文对象 this
- 2.封装实参的对象 arguments
- arguments是一个类数组的对象,可以通过索引操作数据,获取长度
- 在调用函数时,我们所传递的实参都会封装到arguments中
- 即使不定义形参也可以通过arguments来使用实参
- callee属性对应一个正在当前执行的函数对象
function fun(){
console.log(arguments);
console.log(Aray.isArray(arguments)); // false 检查一个对象是不是数组
console.log(arguments.length); // 1
console.log(arguments[0]) ; // hello
console.log(arguments == fun); // true
}
fun('hello');
Date对象
-
表示时间
-
var d = new Date(); // 执行的时间 // 日期格式固定 var d2 = new Date("3/23/2020 15:00:00"); // 创建一个指定的时间 // getDate() 获取当前日期对象是几号 var data = d2.getDate(); //getDay() 获取当前对象的星期几(0-6)0:周日 var day = d2.getDay(); // getMonth(); 获取当前对象的月份 , 从0开始 var month = d2.getMonth(); // getFullYear(); 获取当前对象年 var year = d2.getFullYear(); // getHours()、getMinutes()、getSeconds() //getTime() 获取日期的时间戳 从1970 1/1 到当前花费的毫秒数 // 为了统一单位 console.log(d2/1000/60/60/24/365) // 利用时间戳测试代码的性能 time = Date.now(); // 获取当前的时间戳
Math对象
Math不是一个构造函数,它属于一个工具类
-
它里面封装了数学运算相关的方法和属性
-
console.log(Math.PI); // 圆周率 Math.abs(-1); // 计算一个数的绝对值 Math.ceil(1.4); // 2 可以对一个数进行向上取整 Math.floor(1.4); //1 向下取整 Math.round(1.4); //1 四舍五入 Math.random(); // 随机生成0-1之间的随机数 for(var i=0;i<100;i++){ console.log(Math.round(Math.random()*10)); // 取100个0-10之间随机整数 console.log(Math.round(Math.random()*8)+2); // 2-10 } Math.max(12,23,12); // 23 Math.min(12,23,12); // 12 Math.pow(2,2); // 4 2的2次幂 Math.sqrt(4); // 开方 2
String对象
底层字符串是以字符串数组的形式保存的
var str = "hello world";
console.log(str.length);
console.log(str[1]);
charAt()
-
返回字符串中指定位置的字符
-
var str = "hello world"; var res = str.charAt(0); // h var res = str.charCodeAt(1); // 101 返回指定字符的unicode编码 // frommCharCode() 根据字符编码去获取字符 var res = String.fromCharCode(101); // e
concat()
-
用来连接两个或多个字符串
-
var res = str.concat('h'); // 和 + 一样
indexof()
-
该方法可以检索一个字符串中是否含有指定的内容
-
如果字符串中含有相同的内容,返回第一次出现的索引,没有返回 -1
-
var str = "hello world"; var res = str.indexOf('h'); // 1 var res = str.indexOf('l',1); // 3 指定第二个参数,指定开始查找的位置 // lastIndexOf() var res = str.indexOf('l'); // 从后面开始查找
slice()
- 可以从字符串中截取指定的内容
- 不会影响原字符串,将截取的返回
var str = "hello world";
var res = str.slice(0,2);
subString()
-
可以用来截取一个字符串,和slice()类似
-
不能接受负值,自动调整参数的位置 subString(1,0) -> subString(0,1)
-
var str = "hello world"; var res = str.subString(0,2); // he // subStr() 截取字符串 var str = "hello world"; var res = str.ssubStr(2,2); // 开始位置索引; 截取长度
split()
-
将一个字符串拆分为一个数组
-
var str = "ad,asd,vasd,asd" // 如果传递一个空串,会将每个数组都会拆分成数组中的元素 str.split(","); // 需要字符串作为参数,根据参数去拆分数组 可以传递一个正则表达式作为参数 str.split(/0-9/); // 以字符串中的数字作为分隔符
toSupperCase()
- 字符串大写操作
search()
-
可以搜索字符串中是否含有指定的内容
-
str = 'asdf' res = str.search(/0-9/);
match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
- 默认macth只找到第一个符合要求的内容
- 设置正则表达式为全局匹配模式,这样就可以匹配到所有的内容
- match()会将匹配到的内容封装到一个数组中返回,即使只有一个
str = '12sdf12edasfd';
res = str.match(/[a-z]/); // 找到第一个
res = str.match(/[a-z]/gi); // 找到全部
replace()
-
可以将字符串中指定的内容替换成新的内容
-
参数
- 1.被替换的内容
- 2.新的内容
res = str.replace("a",'k'); // 默认值替换第一个 res = str.replace(/a/g,'k'); // 这样就可以全部替换完成了
正则表达式对象
正则表达式用于定义一些字符串的规则
- 计算机可以根据正则表达式,来检查一个字符串是否符合规则
- 获取将字符串中符合规则的内容提取出来
创建正则表达式对象
- test() 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则,符合返回true
- 匹配模式
- i 忽略大小写
- g 全局匹配模式
// 语法
var 变量 = new RegExp("正则表达式","匹配模式");
// 这个正则表达式可以检查一个字符串中是否含有 a
var reg = new RegExp('a','i');
var str = 'a';
reg.test(str); // true
使用字面量创建正则表达式
- 使用字面量方式创建简单
- 使用构造函数创建更加灵活
// 语法
var 变量 = /正则表达式/匹配模式
reg = /a/i; // var reg = new RegExp('a','i');
// 检查一个字符串是否含有a或b
// [a-z] 任意小写字母
// [A-Z]
reg = /a|b/i;
reg = /[ab]/i; // [ab] = a|b
reg = /a[bce]r/i; // abr acr aer
// [^ab] 除了ab其他的都行
// [0-9] 任意数字
// [^0-9] 除了数字
正则表达式语法
-
量词:通过量词可以设置一个内容出现的次数
-
量词只对它前面一个内容起作用
-
{n} 正好出现 n 次
-
(ab){3} ab出现3次
-
/ab{1,3}c/ b出现1-3次
-
/ab{3,}c/ b最少出现3次
-
“+” 至少一个 相当于 {1,}
-
“*” {0,}
-
“?” 0个或1个
-
“^” 表示开头
-
“$” 表示结尾
-
\w 任意字母数字下滑线
-
\W 匹配一个非单字的字符
-
\d [0-9]
-
\D ^0-9
-
\s 代表任意空白符
-
\S 匹配任意非空字符串
-
reg = /a{3}/; // 连续3个a // 检查一个字符串是否以a开头 reg = /^a/; console.log(reg.test("sdfa")); //false // 检查一个字符串是否以a结尾 reg = /a$/; console.log(reg.test("sdfa")); //true reg = /^a|a$/; // 以a开头或者以a结尾 // 创建一个正则表达式,用来检查是否是一个合法的手机号 // 手机号 11位 以1开头 第二位不能是0,1,2 reg = /^1[^{0,3}][0-9]{9}$/ // 电子邮件 // [email protected] // 任意字母数字下滑线
包装类
基本数据类型
- String Number Boolean Null Undefined
引用数据类型
- Object
在js中为我们提供了三个包装类,通过这三个包装类可以将基本的数据类型的数据转换为对象
- String
- 将一个基本数据类型字符串转换成String对象
- Number
- 将一个基本数据类型字符串转换成Number对象
- Boolean
- 将一个基本数据类型字符串转换成Boolean对象
- 在开发中基本不会使用基本类型的对象
- 如果使用基本数据类型进行比较时,可能会出现错误
var num = new Number(3); //创建一个Number对象
var str = new String('hi');
var bool = new Boolean(true);
// 向num中添加属性,基本数据类型不能添加属性
num.hi = 'abc';
// 浏览器会临时的使用包装类将其转换为对象,然后在调用对象的属性和方法
// 调用完成之后在将其转换成基本数据类型
var s = 10;
s = s.toString(); // 临时调用Number对象的toString
s.hello = 'hi';
console.log(s.hello); // undefined 加完之后又销毁了
据类型字符串转换成Boolean对象
- 在开发中基本不会使用基本类型的对象
- 如果使用基本数据类型进行比较时,可能会出现错误
var num = new Number(3); //创建一个Number对象
var str = new String('hi');
var bool = new Boolean(true);
// 向num中添加属性,基本数据类型不能添加属性
num.hi = 'abc';
// 浏览器会临时的使用包装类将其转换为对象,然后在调用对象的属性和方法
// 调用完成之后在将其转换成基本数据类型
var s = 10;
s = s.toString(); // 临时调用Number对象的toString
s.hello = 'hi';
console.log(s.hello); // undefined 加完之后又销毁了
see you again!!!