JavaScript高级程序设计之引用类型(下)
此篇内容紧接《JavaScript高级程序设计之引用类型(上)》,下边继续开始:
Date类型
Date是一个日期类,用它可以来获取日期和时间以及指定日期的毫秒数。Date类提供了丰富的API,可以通过MDN上的文档来了解:点击这里跳到MDN,这里便不详细阐述了。
RegExp类型
正则表达式绝对是编程语言中的一把利器,无使而不利,在日常编码中会经常用正则来匹配一些东西。JS中的正则,可以通过两种方式来创建:字面量形式和实例化构造函数方式。需要注意的是,字面量创建的正则,会共享一个实例,实例化的方式,每次实例化都会创建新的实例。由于正则学习曲线较高,并不是一篇文章就能讲清楚的,所以这里就不进行讲解了,具体有关JS正则表达式的内容可以点击这里
Function类型
JS中函数也是对象,每个函数都是Function的实例。函数的声明有三种方式,第一种:function sum(){语句....}。sum是函数的名字,它是指向函数的一个指针或引用。第二种:const sum = function(){语句...}。这种叫做函数表达式,它与第一种方式没有任何区别。声明的常量sum存储的仍然是函数的引用。最后一种就是实例化构造函数的方式,例:const sum = new Function("参数..","参数...","语句....")。其最后一个参数总是为函数要执行的语句。第三种声明的方式,是不被推荐的,因为会解析两次,第一次解析常规代码,第二次解析传入构造函数中的字符串,从而影响到性能。
没有重载:重载是面向对象编程语言中的一个特性,根据传入参数的不同,在调用时,执行不同的实现。JAVA、.NET都拥有该特性,但是我们的JS却没有该特性。JS声明两个同名的函数,相当于给函数名赋了两次值,其最后一次会覆盖第一次的赋值。虽然函数没有重载,但是我们却可以利用函数的arguments参数列表来模拟重载。
1 function abc(x,y) 2 { 3 if(arguments.length == 3) 4 { 5 return x+y+arguments[2]; 6 } 7 else 8 { 9 return x + y; 10 } 11 }
该例子,会因为传入参数个数不同,执行不同的实现,从而实现了和重载一样的效果。
函数声明与函数表达式:其两种方式在执行的顺序上是有区别的,解析器会优先解析函数声明,从而保证,函数无论在何处调用,都能正常调用。这种解析方式叫做函数声明提前。函数表达式则不会这样解析,解析器会等执行到其所在的代码行时,才开始解析,也就是说,函数表达式不能在其定义前,调用。
作为值的函数:由于函数可以被赋给变量的特性,函数也可以作为参数传进函数,或作为返回值返回。日常编程中,会经常用到这两种方式。
函数的内置属性:在函数内,有两个属性存在,一个是arguments,另一个是this。arguments是一个类数组对象,存储着函数的所有参数。它和数组一样拥有length属性,并且可以用数组的方式访问存储的值。除此之为,arguments还有两个属性,callee 和 caller。callee存储着当前函数的引用。caller指向调用当前函数的函数的引用。目前,该两个属性在严格模式下,禁止使用,因此编程中尽量少用这两个属性。this对象指向的是当前执行环境的对象,默认函数中的this都指向全局对象window,构造函数中的this,则指向自己的执行环境对象。
函数的属性和方法:函数作为对象,拥有属于自己的属性和行为。属性有length和prototype。length指的是函数参数个数,prototype是原型属性,之后的文章中会详细介绍,这里就不多说了。方法有call、apply和bind。call和apply的作用相同,都是调用函数,改变函数的执行环境对象(也就是this的指向),不同的是其传入的参数。aplly的第二个参数接收一个数组,而call则传入以逗号分隔的个数不定的参数。bind的作用是给函数绑定this,并把这个函数返回,也接收两个参数,第一个为要绑定的this对象,第二个为个数不定的参数。
基本包装类型
基本包装类型就是把基本类型包装成对象,让其可以使用属性和方法。JS中的基本包装类型有Number、Boolean、String。基本包装类型,如果不使用属性和方法的话,它们就是最简单的值类型,但当使用属性和方法时,那一瞬间,它们会变为对象。基本包装类型的生命周期很短,就像前边说的,它仅在使用的时候变为对象,使用过后以后,就立即被销毁。因此这时你给它们添加自定义属性,浏览器会报错。不过,我们有需求的话,可以使用Number()、String()、Boolean()来显示创建。
Boolean类型
Boolean是布尔类型的引用类型表示。利用构造函数Boolean(),传入true和false,会创建对应引用类型。创建的引用类型,用typeof检测,普通的布尔类型,返回“boolean”,但引用类型布尔,返回“object”。
Number类型
Number是基本数值类型的引用表示。它提供了几个格式化数值的方法。toFixed()方法,会返回指定小数位的小数的字符串表示。参数是一个数字,表示保留几位小数,最大可支持0-20位。如果数值的长度要比保留的小数位数长,方法将会对数值进行舍入操作。toExponential()方法返回科学计数法表示的数值的字符串形式。接收一个参数,作用也是指定小数位的个数。toPrecision()方法返回数值最合适的表示形式,接收一个参数,表示数值的所有数字的位数。
String类型
String类型是字符串的对象包装类型,它有一个length属性,表示字符串中包含了多少个字符。它提供了以下方法:字符方法:charAt()以单字符的形式返回指定位置的字符,其有一个参数,指定要返回字符的位置。charCodeAt()返回指定位置字符的字符编码,其接收一个参数,指定要返回字符的位置。字符串操作方法:concat()用于把一个或多个字符串拼接起来,并把得到的新字符串返回。slice()、substr()、substring()会对字符串进行截取,并返回截取后的新字符串。其都接收两个参数,一个起始位置,一个结束位置。结束位置是可选的,如果不传,默认会从起始位置截到字符串的尾部。这三个方法的参数可以传负值,如果传负值,slice会把传入的参数与字符串长度相加。substr会把第一个参数与字符串长度相加,把为负值的第二个参数转换为零。substring会把所有负值参数都转换为零。字符串位置方法:indexOf和lastindexOf,两个方法都会在字符串中查找指定的字符,如果找到,返回该字符在字符串中的位置。如果没有,则返回-1。两个方法的区别是一个从头开始查找,另一个从末尾开始查找。两个方法还接收第二个参数,用于指定从哪个位置开始查找。trim方法用于清除字符串两边的空格。字符串大小写转换方法:大写转换方法:toUpperCase、toLocaleUpperCase。小写转换方法:toLowerCase、toLocalLowerCase。模式匹配方法:所谓模式匹配,就是可以通过正则对字符串进行某些操作的方法。match方法接收一个正则或正则表达式,它会把符合正则规则的字符串,生成一个数组,返回。seach接收一个正则为参数,返回匹配到第一项的字符串的索引,如果没有匹配项,返回-1。replace方法接收两个参数,一个是需要替换的字符串或正则表达式,第二个参数为要替换的具体值或一个函数。split方法把字符串按指定方式分隔,并返回一个数组。接收两个参数,一个参数指定分隔符,另一个参数可选,指定返回数组的大小。
单体内置对象
Global对象
Global对象是个比较虚的对象。之所以说它虚,是因为在运行环境中,它是不可见的,但又确实存在。许多不属于任何对象的属性和方法,都属于全局对象的属性和方法,包括定义的全局变量和全局函数。例如isNaN()、IsFinite()、parseInt()、parseFloat()。它们使用的方式,的确是全局函数,但实际上,它们是全局对象的方法。除此之外还有其它一些方法:enCodeURI、encodeURIComponent对URI进行编码的方法,以及decodeURI和decodeURIComponnent,对URI进行解码的方法。
window对象
虽然JS没有指出访问Global对象的路径,但是在浏览器环境中,把全局对象作为window对象的一部分来进行展现。因此全局对象的属性和方法,就变成了window对象的属性和方法。
Math对象
Math对象提供了一系列用于数学计算的方法,例如绝对值,四舍五入、正弦、余弦等等。详细请点击此处