分类
精读JS高级程序设计

第五章引用类型

引用类型

Object类型

创建Object实例的方式:

  1. 使用new操作符后跟Object构造函数。
  2. 使用对象字面量。
    let person={
        name:'daiwf',
        age:27
    }
    

    在上面代码中,左边的花括号({)表示对象字面量的开始,因为它出现在了表达式上下文中(表达式上下文指该上下文期待一个值,赋值操作符表示后面是一个值)。如果花括号({)出现在一个语句上下文中,如if语句条件的后面,则表示一个语句块的开始。

Array类型

创建Array实例的方式:

  1. 使用Array构造函数。
    let arr=new Array(1,2,3) // [1,2,3]
    let arr1=Array(1,2,3) // [1,2,3]
    let arr2=new Array(3) // [,,] 如果传数值,传小数(小数点后非零的数)或负数会报错
    let arr3=new Array('3') // ['3'] 如果传其它类型的参数
    let arr4=Array.of(3) // [3] 可解决上面的不统一情况
    
  2. 使用数组字面量。
    let arr=[1,2,3]
    

通过设置数组的length属性,可以从数组的末尾移除或向数组中添加新项。

使用Array.isArray()可以很好的检测数组。

Date类型

ES5添加了Date.now()方法获得当前日期与时间的毫秒数(使用+操作符也可获取Date对象的时间戳)

const start=+new Date();

RegExp类型

创建正则表达式的方式:

  1. var expression=/pattern/flags;
    flags:

    • g:表示全局模式,即模式将应用于所有字符串,而非在发现第一个匹配项时立即停止。
    • i:表示不区分大小写模式。
    • m:表示多行模式。
    • u:unicode,匹配多字节字符。
    • s:dotAll,.可以匹配任意字符包括换行符。
    • y:仅从正则表达式lastIndex属性表示的索引处为目标字符串匹配。
  2. var expression=new RegExp(“pattern”,”flags”)

在ES3中使用正则表达式字面量和RegExp构造函数创建的正则表达式不一样,字面量始终共享同一个实例(在循环中使用,lastIndex不回重置),而构造函数始终创建一个新实例。

在ES5及之后两者都始终会创建一个新实例。

// es3下
var re=null,i;
for( i =0 ;i<10 ;i++){
    re=/cat/g;
    re.test("catastrophe") // 除第一次循环匹配后,后面的将不能匹配,因为是同一个实例lastIndex没有重置
}

Function类型

创建函数的方式:

  1. 函数声明 function sum (a,b){ return a+ b}

  2. 函数表达式 var sum =function(a,b){return a+ b}

  3. Function构造函数 var sum = new Function("a","b","return a + b ")不推荐

函数声明和函数表达式的区别:

解析器会率先读取函数声明,并使其在执行任何代码之前可以访问(函数声明提升),而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。

发表评论

电子邮件地址不会被公开。 必填项已用*标注