JS核心04:常用内建对象以及正则表达式

call和apply

这两个方法都是函数对象的方法,需要通过后函数对象来调用

当对函数调用call()和apply()都会调用函数执行
在调用call()和apply()可以将一个对象指定为一个参数,
此时这个对象将会成为函数执行时的this

  <script>
        function f() {
            alert(this);
        }

        f(); //this为window
        var obj={};
        f.call(obj) //this为object
        f.apply(obj); //this为object
    </script>
  • call和apply一致传入的参数作为this
 <script>
        var obj={
            name: 'zzq',
            age:25,
            sayName:function () {
                alert(this.name);
            }
        };

        var obj1={
            name: 'lxd',
            age:25,
            sayName:function () {
                alert(this.name);
            }
        };
        
        obj.sayName.call(obj1);
    </script>

call()方法可以将实参在对象之后一次传递
apply()方法需要将实参封装到一个数组中同一传递

 <script>
        function f(a,b) {
            alert(`a=${a},b=${b}`)
        }

        var obj={};
        f.call(obj,5,6); //输出a=5,b=6
        f.apply(obj,5,6);//报错Uncaught TypeError: CreateListFromArrayLike called on non-object
    </script>

this的情况:
1、以函数形式调用时,this永远都是window
2、以方法的形式调用时,this是调用方法的对象
3、以构造函数的形式调用时,this是新创建的对象
4、使用call和apply调用时,this是指定的那个对象

arguments

在调用函数时,浏览器每次都会传递两个隐含的参数,
1、函数的上下文对象this
2、封装实参对象arguments: arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度, 在调用函数时,我们所传递的实参都会在arguments中保存,arguments.length可以获取实参的长度
我们即使不定义形参,也可以通过arguments来使用实参,只不过比较麻烦,arments[0]表示第一个实参,依次类推
它里边有一个属性叫做callee,这个属性对应一个属性,就是当前正在指向的函数的对象

  <script>
        function aa() {
            alert(`a=${arguments[0]},b=${arguments[1]}`)
            console.log(arguments.callee)
        }
        aa(5,6);
    </script>

常用内建对象

常用的内建对象有Date、Math、String

Date

创建一个date

    <script>
        let date = new Date();
        alert(date)
    </script>

包装类

在JS中为我们提供了三个包装类,通过这三个包装类可以将基本数据类型转换为对象
String、Number、Boolean
String:可以将基本数据类型字符串转换为String对象
Number:可以将基本数据类型的数字转换为Number对象
Boolean:可以将基本数据类型的boolean值转换为Boolean

  <script>
        var a=new Number(25);
        var b=new String('aaaa')
        var c=new Boolean(true);
    </script>

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

字符串相关方法

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

  • indexOf()
    该方法可以检索一个字符串中是否含有指定内容,如果字符串中含有该内容,则会返回其第一次出现的索引,如果没有找到指定的内容,则返回-1,可以指定一个 第二个参数,指定开始查找的位置
<script>
        var str='hello';
        let number = str.indexOf('h',1); //-1 表示从第二位开始检索
        alert(number);
    </script>

正则表达式

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

创建正则表达式对象

创建对象后用test()方法检查字符串是否符合正则表达式

 <script>
        //检查字符串中是否含有 'z'
        var reg=new RegExp('z');
        var str='z';
        if (reg.test(str)) {
            alert('ddd')
        }
    </script>

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

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

  • 创建一个正则表达式,检查一个字符串是否含有a或者b
    使用|表示或者的意思
  <script>
        var reg=/a|b/;
        var str='acd';
        if (reg.test(str)) {
            alert('成功');
        }
    </script>
  • 创建一个正则表达式来检查一个字符串是否有字母
    []中的内容也是或的关系,a-z:表示任意小写字母,i:表示忽略大小写 ,g:表示不忽略大小写
<script>
        var reg=new RegExp('[a-z]');
        var str='abcd';
        if (reg.test(str)) {
            alert('成功');
        }
    </script>
  • 创建一个正则表达式来检查一个字符串是否有字母,不忽略大小写
  <script>
        var reg=/[a-z]/g
        var str='AB';
        if (reg.test(str)) {
            alert('成功');
        }
    </script>
  • 检查一个字符串是否含有 ‘abc’ 'adc' 'aec'
 <script>
        var reg=/a[bde]c/;
        var str='abc';
        if (reg.test(str)) {
            alert('成功');
        }
    </script>

[^]除了的意思

 <script>
        var reg=/[^ab]/;
        var str='abd';
        if (reg.test(str)) {
            alert('成功');
        }
    </script>

字符串和正则相关的方法

  • split
    可以将字符串拆分为一个数组
    方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆封字符串
    可以根据任意字母来将字符串进行拆分
  <script>
        var str='1a2b3c4d5e6f';
        var reg=/[A-z]/;
        var resutl=str.split(reg);
        alert(resutl);
    </script>
  • search
    可以搜索字符串中是否含有指定内容
    如果搜索到指定内容,则会返回第一次出现的索引,如果没有检索到则返回-1
    它可以哦接收一个正则表达式作为参数,然后根据正则表达式去检索字符串
<script>
        var str='hello abc hello aec afc';
        //搜索字符串中是否含有abc或 aec 或者 afc
        let number = str.search(/a[bef]c/);
        alert(number);
    </script>
  • match
    可以根据正则表达式,从一个字符串中将符合正则的内容提取出来
    默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索,我们可以设置正则表达式为全局匹配模式
    可以为一个正则表达式这是多个匹配模式且顺序无所谓
  <script>
        var str='1a2b3c4d5e6f';
        //提取出字符串中的字母
        let array = str.match(/[A-z]/gi);
    </script>
  • replace
    replace()可以将字符串中指定内容替换为新的内容
    默认只会替换第一个,所以使用全局模式
<script>
        var str='1a2b3c4d5b6a';
        //将字符串中指定内容替换为新的内容
        let s = str.replace(/[a]/gi,'@@');
        alert(s);
    </script>

正则表达式语法01

  • 量词
    通过量词可以设置一个内容出现的次数
    {n}正好出现n次,量词只对前面的一个内容起作用
    {1,3}出现1到三次
    {m,}m次以上
    /ab+c/:至少一个,相当于{1,}
    /ab*c:0个或多个,相当于{0,}/
    /ab?c/: 0个或1个,相当于{0,1}
<script>
        /**
         * 创建一个正则表达式检查一个字符串中是否含有aaa
         */
        var  reg=/a{3}/;
        var str='aaabbc';
        if (reg.test(str)) {
            alert('success');
        }
    </script>
  • 检查一个字符串是否以a开头
    ^表示开头
<script>
        /**
         * 创建一个正则表达式检查一个字符串中是否以a开头
         */
        var  reg=/^a/;
        var str='abc';
        if (reg.test(str)) {
            alert('success');
        }
    </script>
  • 检查一个字符串是否以a结尾
    $表示结尾
<script>
        /**
         * 创建一个正则表达式检查一个字符串中是否以a结尾
         */
        var  reg=/a$/;
        var str='abca';
        if (reg.test(str)) {
            alert('success');
        }
    </script>
  • 创建一个正则表达式来检查是否是有是一个手机号
<script>
        /**
         * 创建一个正则表达式检查手机号
         */
        var reg=/^1[3-9]{1}[0-9]{9}$/;
        var str='17361562673';
        if (reg.test(str)) {
            alert('success');
        }
    </script>

正则表达式语法02

.表示任意字符
在正则表达式中使用\作为转义字符 \.来表示

  • 检查一个字符串中是否含有 .
 <script>
        /**
         * 检查一个字符串中是否含有 .
         * .表示任意字符,所以要进行转义
         */
        var reg=/\./;
        var str='a.';
        if (reg.test(str)) {
            alert('success');
        }
    </script>

使用够构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符如果要使用\则需要使用\\来代替
\w:匹配任意字母、数字、_,相当于[A-z0-9]

 <script>
        var reg=/\w/;
        var str='abc_123';
        if (reg.test(str)) {
            alert('success');
        }
    </script>

\W:除了字母、数字、_相当于[^A-z0-9]
\d任意的数字,相当于[0-9]
\D除了数字,相当于[^0-9]
\s:空格,
\S除了空格

 <script>
        var reg=/\S/;
        var str='  ';
        if (reg.test(str)) {
            alert('success');
        }
    </script>

\b表示单词边界

<script>
        /**
         * 创建一个正则表达式检查一个字符串中是否含有单次child
         */
        var reg=/\bchild\b/
        var str='hello child';
        if (reg.test(str)) {
            alert('success');
        }
    </script>
  • 去除字符串中的空格
<script>
        /**
         * 创建一个正则表达式去除字符串中的空格
         */
        var reg=/^\s*|\s*$/g; //表示开头0个或多个空格
        var str='         hello        ';
        let s = str.replace(reg,'');
        console.log(str);
        console.log(s);
    </script>
  • 电子邮件正则表达式
    /** * 电子邮件 * hello .nihao @ abc .com.cn * \w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2} * @type {RegExp} */
 <script>
        /**
         * 电子邮件
         * hello  .nihao   @  abc .com.cn
         * \w{3,}  (\.\w+)*  @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
         * @type {RegExp}
         */
        var reg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/
        var str='17361562676@163.com';
        if (reg.test(str)) {
            alert('success');
        }
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值