引用类型
Object类型
创建Object实例的方式:
- 使用
new
操作符后跟Object构造函数。 - 使用对象字面量。
let person={ name:'daiwf', age:27 }
在上面代码中,左边的花括号({)表示对象字面量的开始,因为它出现在了表达式上下文中(表达式上下文指该上下文期待一个值,赋值操作符表示后面是一个值)。如果花括号({)出现在一个语句上下文中,如if语句条件的后面,则表示一个语句块的开始。
Array类型
创建Array实例的方式:
- 使用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] 可解决上面的不统一情况
- 使用数组字面量。
let arr=[1,2,3]
通过设置数组的length属性,可以从数组的末尾移除或向数组中添加新项。
使用Array.isArray()
可以很好的检测数组。
Date类型
ES5添加了Date.now()
方法获得当前日期与时间的毫秒数(使用+操作符也可获取Date对象的时间戳)
const start=+new Date();
RegExp类型
创建正则表达式的方式:
- var expression=/pattern/flags;
flags:- g:表示全局模式,即模式将应用于所有字符串,而非在发现第一个匹配项时立即停止。
- i:表示不区分大小写模式。
- m:表示多行模式。
- u:unicode,匹配多字节字符。
- s:dotAll,
.
可以匹配任意字符包括换行符。 - y:仅从正则表达式lastIndex属性表示的索引处为目标字符串匹配。
- 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类型
创建函数的方式:
- 函数声明
function sum (a,b){ return a+ b}
-
函数表达式
var sum =function(a,b){return a+ b}
-
Function构造函数
var sum = new Function("a","b","return a + b ")
不推荐
函数声明和函数表达式的区别:
解析器会率先读取函数声明,并使其在执行任何代码之前可以访问(函数声明提升),而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。