本文梳理JavaScript作为面向对象语言的封装、聚集、继承与多态四大能力,详解本地对象中的Array与Date类。重点解析Array的toString、join、splice等操作方法,以及利用push/pop和shift实现栈与队列的逻辑,并列举Date类获取与设置时间部分的核心API。
JavaScript 面向对象四大核心能力
面向对象语言需向开发者提供四种核心能力:
(1) 封装——将数据或方法等信息整合并存储于对象内部的能力。
(2) 聚集——将一个对象嵌入至另一个对象内部的能力。
(3) 继承——从其他类(或多个类)获取属性与方法的能力。
(4) 多态——编写能以多种形态运行的函数或方法的能力。
JavaScript 对象类型分类
对象的类型
1.本地对象
①Array类
②Date类
2.内置对象
3.宿主对象
Array 类常用操作方法详解
Array类
toString()与valueOf()方法返回特殊字符串,该字符串由对每项调用toString()并用逗号连接构成。例如,含"red"、"green"和"blue"的数组调用此方法,返回"red,green,blue"。
join()方法仅用于连接字符串值,其唯一参数指定数组项间的分隔符字符串。
split()方法将字符串转为数组,参数为视作项间分隔符的字符串。若分隔符为空字符串,返回数组中每项为字符串的一个字符。
concat()处理数组的方式与处理字符串类似,参数附加至数组末尾,返回包含原项与新项的新Array对象。
slice()接受一个或两个参数,分别为提取项的起始和结束位置。单参数时返回该位置至结尾的所有项;双参数时返回起始位置至结束位置(不含结束位)的项。
unshift()方法将项置于数组首位,其余项依次后移一位。
reverse()方法反转数组项的顺序。
sort()方法按数组项值升序排列。(注:仅对字符串编码排序,数字数组需另寻方案)
splice()方法最为复杂,用于在数组中部插入数据项。
1.删除——声明两个参数即可删除任意多项,分别为起始位置和删除项数。例如arr.splice(0,2)删除前两项。
2.替换而不删除——声明三个参数:起始位置、0(删除项数)及插入项。还可指定更多插入项。例如arr.splice(2,0,"red", "green")在位置2插入"red"和"green"。
3.替换并删除——声明三个参数:起始位置、删除项数及插入项。可指定更多插入项,插入数不必等于删除数。例如arr.splice(2,1, "red","green")删除位置2的项,并在该处插入"red"和"green"。
栈与队列的数据结构及 Array 实现
栈和队列的概念
区别一
栈:后进先出(LIFO)结构,先添加项后删除,插入和删除操作均发生在栈顶。
队列:先进先出(FIFO)结构,先添加项最后删除,插入操作在队尾,删除操作在队头。
区别二
栈:顶部添加项称“推入栈”,删除顶部项称“弹出栈”。
队列:队尾添加项称“put”或“入队”,队头删除项称“get”或“出队”。
在Array类中的运用
栈:push()在Array末尾添加一个或多个项,pop()删除最后一项(length-1)并返回。
队列:push()将项加入队列(数组末尾),shift()删除首项并返回。
Date 类时间与日期处理方法
Date类
Date类的方法(见下表)均用于设置或获取日期值的特定部分。
|
方 法 |
说 明 |
|
toLocaleDateString() |
以地点特定的格式显示Date的时间部分 |
|
getTime() |
返回日期的毫秒表示 |
|
setTime(milliseconds) |
设置日期的毫秒表示 |
|
getFullYear() |
返回用四位数字表示的日期的年份(如2004而不只是04) |
|
getUTCFullYear() |
返回用四位数字表示的UTC日期的年份 |
|
setFullYear(year) |
设置日期的年份,参数必须是四位数字的年份值 |
|
setUTCFullYear(year) |
设置UTC日期的年份,参数必须是四位数字的年份值 |
|
getMonth() |
返回日期的月份值,由数字0(1月)到11(12月)表示 |
|
getUTCMonth() |
返回UTC日期的月份值,由数字0(1月)到11(12月)表示 |
|
setMonth(month) |
设置日期的月份为大于等于0的数字。对于大于11的数字,开始累计年数 |
|
setUTCMonth(month) |
设置UTC日期的月份为大于等于0的数字。对于大于11的数字,开始累计年数 |
|
getDate() |
返回该日期该月中的某天 |
|
getUTCDate() |
返回该UTC日期该月中的某天 |
|
setDate(date) |
设置该日期该月中的某天 |
|
setUTCDate(date) |
设置该UTC日期该月中的某天 |
|
getDay() |
返回该日期为星期几 |
|
getUTCDay() |
返回该UTC日期为星期几 |
|
setDay(day) |
设置该日期为星期几 |
|
setUTCDay(day) |
设置该UTC日期为星期几 |
|
getHours() |
返回日期中的小时值 |
|
getUTCHours() |
返回UTC日期中的小时值 |
|
setHours(hours) |
设置日期中的小时值 |
|
setUTCHours(hours) |
设置UTC日期中的小时值 |
|
getMinutes() |
返回日期中的分钟值 |
|
getUTCMinutes() |
返回UTC日期中的分钟值 |
|
setMinutes(minutes) |
设置日期中的分钟值 |
|
setUTCMinutes(minutes) |
设置UTC日期中的分钟值 |
|
getSeconds() |
返回日期中的秒值 |
|
getUTCSeconds () |
返回UTC日期中的秒值 |
|
setSeconds (seconds) |
设置日期中的秒值 |
|
setUTCSeconds (seconds) |
设置UTC日期中的秒值 |
|
getMilliseconds() |
返回日期中的毫秒值。注意,这不是自1970年1月1日以后的毫秒值,而是当前时间中的毫秒值,例如4 :55 :34.20,其中20即为时间的毫秒值 |
|
getUTCMilliseconds () |
返回UTC日期中的毫秒值 |
|
setMilliseconds (milliseconds) |
设置日期中的毫秒值 |
|
setUTCMilliseconds (milliseconds) |
设置UTC日期中的毫秒值 |