目录

call和apply

this的情况

arguments

Date对象

Math

包装类

字符串的相关方法

正则表达式

使用字面量来创建正则表达式

字符串和正则相关的方法

量词

练习


call和apply

  • 这两个方法都是函数对象的方法,需要通过函数对象来调用
  • 当对函数调用call()和apply()都会调用函数执行
  • 在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象将会称为函数执行时的this
  • call()方法可以将实参在对象之后依次传递
  • apply()方法需要将实参封装到一个数组中统一传递

this的情况

以函数形式调用时,this永远都是window

function fun(){
alert(this);
}
fun();
fun.call();
fun.apply();
//[object Window]

以方法的形式调用时,this是调用方法的对象

 var obj = {name: "obj",sayName: function () {alert(this.name);},};
function fun(){
alert(this);
};fun.call(obj);fun.apply(obj);
//[object Object]

以构造函数的形式调用时,this是新创建的那个对象

function fun() {console.log("a="+a);console.log("b="+b);// alert(this);}var obj = {name: "obj",sayName: function () {alert(this.name);},};fun.call(obj,2,3);fun.apply(obj,[2,3]);

使用call和apply调用时,this是指定的那个对象

var obj = {name: "obj",sayName: function () {alert(this.name);},};
var obj2 = { name: "obj2" };
obj.sayName.apply(obj2);

回顾:

在调用函数时,浏览器每次都会传递两个隐含的参数

  • 函数的上下文对象this
  • 封装实参的对象arguments

arguments

  • 是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
  • 在调用函数时,我们所传递的实参都会在arguments中保存
  • 我们即使不定义形参,也可以通过arguments来使用实参
  • 其中还有一个属性,叫callee,这个属性对应一个函数对象,就是当前指向的函数的对象
        function fun(){// 判断arguments是不是数组console.log(arguments instanceof Array);console.log(Array.isArray(arguments));console.log(arguments[0]);console.log(arguments.length);console.log(arguments.callee==fun);}fun("hello",true);

Date对象

表示一个时间

如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间

var d = new Date();console.log(d);

如果要指定时间时,需要在构造函数中传递一个表示时间的字符串作为参数

日期格式:月份/日/年(空格)时:分:秒

var d2=new Date("7/2/2021 14:00:12");console.log(d2);

getDate()

获取当前日期对象是几日

var date=d.getDate();console.log("date="+date);

getDay()

获取当前日期对象是周几

会返回0-6的值,0表示周日,1表示周一,以此类推

var day=d.getDay();console.log("day="+day);

getMonth()

获取当前日期的月份

会返回0-11,0表示1月份,1表示2月份,以此类推

var month=d.getMonth();console.log("month="+month);
// 0表示1月
// 1表示2月份
// 0-11

getFullYear()

获取当前日期的年份

 var year=d.getFullYear();console.log(year);

getTime()

获取当前日期对象的时间戳

  • 时间戳,指的是从格林威治标准时间的1970年1月1日,0时0分0秒到当前日期所花费的毫秒数(1秒=1000毫秒)
  • 计算机底层在保存时间时使用都是时间戳
var time=d.getTime();console.log(time/1000/60/60/24/365);

利用时间戳来测试代码的执行的性能

 var start=Date.now();for(var i=0;i<100;i++){console.log(i);}var end=Date.now();console.log(end-start);

Math

和其他的对象不同,特别是一个构造函数,它属于一个工具类不用创建对象,它里边封装了数学运算相关的属性和方法

比如Math.PI 表示圆周率

abs()可以计算一个数的绝对值

console.log(Math.abs(-1));

Math.ceil()

可以对一个数组进行向上取整,小数位只要有值就自动进1

Math.floor()

可以对一个数组进行向下取整,小数部分会被舍掉

Math.round()

可以对一个数组进行四舍五入

console.log(Math.ceil(1.4));console.log(Math.floor(1.7));console.log(Math.floor(1.3));console.log(Math.round(1.7));

Math.random()

可以用来生成一个0-1之间的随机数

  • 生成一个0-x的随机整数,即Math.round(Math.random()*x)
  • 生成x-y之间的随机数,即Matn.round(Math.random()*(y-x)+x)
for(var i=0;i<10;i++){console.log(Math.round(Math.random()*9)+1);}

max()

可以获取多个数中的最大值

 var max=Math.max(1,3,5);console.log(max);

min()

可以获取多个数中的最小值

Math.pow(x,y)

返回x的y次幂

console.log(Math.pow(12,3));

Math.sqrt()

对一个数进行开方运算

console.log(Math.sqrt(81));

包装类

回顾:

基本数据类型

  • string
  • boolean
  • number

引用数据类型

  • Object

在JS中为我们提供了三个包装类,通过三个包装类可以将基本数据类型的数据转换为对象

String()
可以将基本数据类型字符串转换为String()对象

Number()

可以将基本数据类型转换为Number类型

Boolean()

可以将基本数据类型的布尔值转换为Boolean对象

方法和属性只能添加给对象,不能添加给基本数据类型

当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将其转换为对象,然后调用对象的属性和方法,调用完以后,在将其转换为基本数据类型

var s=123;s=s.toString();s.hello="你好";console.log(s.hello);//undefinedconsole.log(s);//123console.log(typeof s);//string

字符串的相关方法

在底层字符串是以字符串数组的形式保存的

length属性

可以用来获取字符串的长度

var str="Hello Atguigu";console.log(str.length);

charAt()

可以返回字符串中指定位置的字符

根据索引获取指定的字符

var str="Hello Atguigu";
var result=str[0];result=str.charAt(0);console.log(result);

charCodeAt()

获取指定位置字符的字符编码(Unicode编码)

var result=str.charCodeAt(0);

String.fromCharCode()

可以根据字符编码去获取字符

var result=String.fromCharCode(72);result=String.fromCharCode(0x2682);console.log(result);

concat()
可以用来连接两个或多个字符串

作用和+一样

result=str.concat("你好","再见");console.log(result);console.log(str);

indexof()

检索一个字符串中是否含有指定内容

如果字符串中含有字符串,则会返回其第一次出现的索引,如果没有找到指定的内容,则返回-1

可以指定一个第二个参数,指定开始查找的位置

LastIndexOf()

该方法和indexOf()一样,不同的是indexOf()是从前往后找,而LastIndexOf是从后往前找,也可以指定开始查找的位置

var str="hello hatguigu";var result=str.indexOf("h");result=str.indexOf("h",1);result=str.lastIndexOf("h");result=str.lastIndexOf("h",4);console.log(result);

slice()

可以从字符串中截取指定的内容,不会影响原字符串,而是截取到内容返回

参数

第一个,开始位置的索引(包括开始位置)

第二个,结束位置的索引(不包括结束位置)

如只有一个参数,则会截取到后面所有;也可以传递一个符数作为参数,负数的话将会从后边计算

var result=str.slice(1,4);result=str.slice(1,-1);console.log(result);

substring()

可以用来截取一个字符串,和slice()类似

参数:

第一个,开始截取位置的索引(包括开始位置)

第二个,结束位置的索引(不包括结束位置)

不同的是,这个方法不能接受负值作为参数,如果传递了一个负值,则默认使用0.

而且他还自动调整参数的位置,如果第二个参数小于第一个,则自动交换

var result=str.substring(1,0);result=str.substring(2,1);

split()

可以将一个字符串拆分为一个数组,如果传递一个空串作为参数,则会拆分每一个字符串

参数:

需要一个字符串作为参数,将会根据该字符串去拆分数组

str="a,b,dc,d";result=str.split(",");result=str.split("d");// ['a,b,', 'c,', '']
console.log(result);console.log(Array.isArray(result));//trueconsole.log(result[1]);

toUpperCase()

将一个字符串转换为大写并返回

toLowerCase()

将一个字符串转换为小写并返回

str="abcdefg";result=str.toUpperCase();result=str.toLowerCase();console.log(result);

正则表达式

用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。

创建正则表达式的对象

语法:var 变量=new RegExp("正则表达式“,"匹配模式");

使用typeof检查正则对象,会返回object

在构造函数中可以传递一个匹配模式作为第二个参数

可以是

  • i    忽略大小写
  • g    全局匹配模式

正则表达式的方法

test()

使用这个方法可以用来检查一个字符串是否复合正则表达式的规则,如果符合则返回true,否则返回false

var reg = new RegExp("a","i");var str = "a";var result=reg.test(str);console.log(result);console.log(reg.test("bcbc"));console.log(reg.test("Abd"));

使用字面量来创建正则表达式

语法

var 变量=/正则表达式/匹配模式

var reg=/a/i;

检查一个字符串是否有a或b

使用  |  表示或的意思

reg=/a|b|c/;console.log(reg.test("d"));//false

[]里的内容也是或的意思

reg=/[asdf]/;console.log(reg.test("d"));//true
[ab] a|b
[a-z] 任意小写字母
[A-Z] 任意大写字母
[A-Z] 任意字母
[0-9] 任意数字

检查一个字符串中是否含有abc或adc或aec

reg=/a[bde]c/;console.log(reg.test("afc"));//falseconsole.log(reg.test("abc"));//true

[^   ]  除了

reg=/[^0-9]/;reg=/[^a-z]/;console.log(reg.test("1"));//trueconsole.log(reg.test("a1bc"));//true

字符串和正则相关的方法

split()

可以将一个字符串拆分为一个数组

var str="1a2b3c4d5e6f7";
var result=str.split("c");
console.log(result);//['1a2b3', '4d5e6f']console.log(result.length);//2

方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串,这个方法即使不指定全局匹配,也会全部拆分

var str="1a2b3c4d5e6f7";
var result=str.split(/[A-z]/);
//相当于    result=str.split(/[A-z]/g);
console.log(result);//['1', '2', '3', '4', '5', '6', '7']console.log(result.length);//7

search()

  • 可以搜索字符串中是否含有指定内容
  • 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
  • 它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
  • 即使设置全局匹配,也只会显示第一个
str="hello abc hello aec afc";result=str.search(/a[bef]c/);console.log(result);//6

match()

  • 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
  • 默认情况下我们的match只会找到第一个符合要求的内容,找到以后就会停止检索,我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
str="1a2b3c4d5e6f7A";result=str.match(/[a-z]/ig);//['a', 'b', 'c', 'd', 'e', 'f', 'A']console.log(result);console.log(Array.isArray(result));//true

replace()

可以将字符串中指定内容替换为新的内容

参数:

  1. 被替换的内容
  2. 新的内容

不影响原来的字符串,默认值换第一个

result=str.replace(/[a-z]/ig,"@-@");// 1@-@2@-@3@-@4@-@5@-@6@-@7@-@result=str.replace(/[a-z]/ig,"");// 1234567console.log(result);

量词

通过量词可以设置一个内容出现的次数

量词只对它前边的一个内容起作用

{n}  正好出现n次
{m,n} 出现m到n次
{m,} m次以上
+ 至少一个,相当于{0,1}
* 0个或多个,相当于{0,1}
? 0个或1个,相当于{0,1}
var reg=/a{3}/;reg=/(ab){3}/;console.log(reg.test("abababd"));//false// truereg=/ab{1,3}c/;reg=/ab{3,}c/;reg=/ab+c/;reg=/ab*c/;reg=/ab?c/;console.log(reg.test("abc"));

检查一个字符串是否以a开头

^ 表示开头
表示结尾
reg=/^a/;reg=/a$/;console.log(reg.test("abca"));//true

练习

创建一个正则表达式,用来检查一个字符串是否是一个合法手机号

确定手机号规则

  1. 以1开头
  2. 第二位3-9任意数字
  3. 三位以后任意数字9个
var phoneStr="13434534563";var phoneReg=/^1[3-9][0-9]{9}$/;console.log(phoneReg.test(phoneStr));

javaScript(call,apply,date,arguments,Math)相关推荐

  1. javaScript函数的定义和arguments,result关键字

    javaScript函数的定义和arguments,result关键字 函数的两种定义方式 function abs(x) {if(x>0){return x;}else {return -x; ...

  2. JavaScript笔记6(数组,foreach(),slice(),splice(),数组的剩余方法,函数的方法call和apply ,arguments,Date对象,Math,字符串的相关方法)

    JavaScript 数组(Array) forEach(),slice(),splice() 数组的剩余方法 函数的方法call()和apply() arguments Date对象 Math 字符 ...

  3. 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象

    01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...

  4. 数组,es5,字符串,Math和Date

    数组的定义 var arr = [ ] 这个一个空数组,定义带数据的数组: var arr =[ '张三','李四','王五','赵六'] 数组中数据类型没有限制,在实际项目中,数组中通常会存储同一类 ...

  5. 【面试需要】掌握JavaScript中的this,call,apply的原理

    作者 |  Jeskson 掘金 |  https://juejin.im/user/5a16e1f3f265da43128096cb 2020年01月10日 前言,为什么要学习在掌握JavaScri ...

  6. 【Java6】Date类/Calendar类,System类/Math类,包装类,集合,泛型,内部类

    文章目录 1.Date类:getTime(),SimpleDateFormat 2.Calendar类:只有子类对象才能向上转型 3.System类:System.exit(0) 4.Math类:ce ...

  7. 从 +new Date 说起,Javascript的一元操作符

    http://zhouhua.github.io/2013/07/09/UnaryOperator/ 更多 在偶然打开d3 的源代码的时候,我看到了这样一段代码. 1 2 3 if (!Date.no ...

  8. JavaScript之call,bind,apply方法及 this 的用法辨析

    文章转自个人博客 https://knightyun.github.io/2019/05/01/js-call,转载请申明. 概述 JavaScript函数中的三个方法.call(), .apply( ...

  9. 自定义new Date()格式显示,适用JavaScript / Nodejs / Vue / React / UniApp / 其他基于js工程的项目

    定义一个文件去存储下列代码,全局引入就可以使用了 // 直接new就可以了 let time = new Date().Format(); 下面直接上代码: /*create By Jane 时间格式 ...

最新文章

  1. ASP.NET-Cookies的用法
  2. console口有几个vlan_windows7 下如何通过consle线配置交换机、路由器?
  3. 【设计模式】接口隔离原则
  4. 32岁学python 人工智能_python深入学习好还是直接学人工智能好?
  5. Dreamweaver 2019安装教程
  6. 这三种策略可以帮助女性在科技领域蓬勃发展
  7. 6-2-2:STL之string——string的模拟实现
  8. java mail 接受QQ邮箱未读的邮件
  9. python 回归 显著_Python数分:回归分析
  10. javascript动态修改对象的属性名
  11. virtual关键字
  12. 11.GitLab webhooks
  13. BZOJ2281 [SDOI2011]黑白棋 【dp + 组合数】
  14. android ui设计最新字体,手机ui设计常用字体一般有哪些,UI设计中的字体有什么规范要求...
  15. PHP微信公众号授权登录
  16. C语言:文章各类字符数统计
  17. Outlook邮件目录中存在部分英文和中文,修改为中文的方法
  18. xp系统怎么弄清微软服务器名称,xp系统如何做远程服务器呢
  19. android停止蓝牙音乐服务,蓝牙音乐播放状态一直为暂停态
  20. 介绍一下xgb_XGB羽毛球app

热门文章

  1. keras Mask Rcnn代码走读(九)-detect方法介绍
  2. 当面试官问Webpack的时候他想知道什么
  3. rqt teb参数动态调试工具_teb
  4. CSS清除浮动(1)
  5. mysql介绍(myisam)
  6. LPF与HPF是什么意思?
  7. android html5 加密,android studio MD5加密 示例代码
  8. 成功解决Win10连接上wifi但是却显示“无Internet,安全”
  9. 手机6120C 玩仙剑dos版
  10. oracle aix 11.2.0.3,Oracle 11.2.0.3 Database for AIX bug导致ORA-04030的报错