第五章基本引用类型笔记1


正则表达式

正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到。

先前考核项目中有接触过正则表达式,获取歌词后通过正则表达式将对应时间节点和歌词部分分别截取出来。
例如下列歌词:
例子

var lrc = [];
var arr = str.split('\n')//以回车作为分隔符 分割歌词
var reg = /\[(\d{2}:\d{2})\.\d{2,3}\](.+)/
//正则表达式分割歌词
arr.forEach(function (a) {
    //forEach for循环的简化写法
    if (reg.exec(a) != null) {
        timer.push(reg.exec(a)[1])//推入歌词对应时间的项
        lrc.push(reg.exec(a)[2])//推入对应歌词的项
    }

除了截取相关歌词,还有诸多应用:手机号码,qq号码的匹配等。

扩展部分:·常见元字符及其应用举例·

原始值包装类型

原始值:存储在栈中的简单数据段。也叫基本数据类型,包括 Number、Stirng、Boolean、Null、Underfined。

let s1 = 'some text';
typeof s1 // "string"
let s2 = s1.substring(2);

s1 是一个基础数据类型,不是一个对象,所以按道理说,s1 是不应该有 substring (或者其他任何属性和方法)方法的。但是字符串是有这个方法的。那是因为每当用到原始值的某个属性和方法时,后台都会创建一个相应的原始包装对象,从而暴露出操作原始值的各种方法。
具体来说,当以上代码第二行访问 s1 时,是以读写模式访问的,也就是要从内存中读取变量保存的值。在以读写模式访问字符串值的时候,后台都会执行 3 步操作:

let s1 = new String('some text');
let s2 = s1.substring(2);
s1 = null;

1.创建一个原始值的实例
2.调用这个实例上的方法
3.销毁这个实例
上述行为让原始值拥有了对象

let str = 'abc';
str.color = 'red';
console.log(str.color);    // undefined

解读:
在非严格模式下,当我们尝试给原始值赋值时,其实是生成了一个原始值包装类型实例,也是给这个新生成的实例赋值,但是在赋值之后这个实例就被销毁了。实际上并没有将值赋值我们想要的目标变量身上,其次,在下次读取这个属性,又创建了一个原始值包装类型实例,显然这个实例(对象)和之前那个赋值的不是同一个实例,所以自然读取不到属性值。

引用类型和包装类型的主要区别在于生命周期

通过 new 实例化引用类型后,得到的实例会在离开作用于时被销毁
而自动创建的原始值包装对象只存在于访问它的那行代码执行期间
这意味着不能运行时给原始值添加属性和方法
显示的创建原始值包装类型

let s1 = new String('some text');
typeof s1 // "object"
s1.color = 'red';
console.log(s1.color); // red

包装类型是特殊的引用类型。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可能调用一些方法来操作这些数据,此行代码运行完被创建的对象即被销毁。
包装类型共包括 Boolean、Number 和 String 三种。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值