作业
1、判断是否为闰年,闰年是为了补上人为设立的日历与地球实际公转的时间差。分为普通闰年(被4整除)、世纪闰年(被400整除)
四年一闰,百年不闰,四百年再闰
function isLeapYear(year){
if(year % 4 === 0 && year % 100 !== 0){
return true
}else if(year % 400 === 0){
return true
}else{
return false
}
}
2、符号优先级
new Foo.getName() // '.' 运算符优先级大于 new运算符
new Foo().getName() // '()' 运算符优先级高于 '.'运算符;new 运算符 和Foo方法一并执行,
//变成了调用Foo构造函数的实例的getName方法
数组方法
1、concat
用于合并两个或多个数组,不改变原有数组,生成返回一个新的数组
2、slice(切下),截取指定范围元素,以数组形式返回,不改变原数组
接受两个参数,
start,指定截取开始位置,可正可负。
end,指定截取结束位置(不包含该位置元素),可正可负。但是一直都是指定下标。
如果start和end不包含元素,则返回空数组
let arr = [1,2,3,4,5]
console.log(arr.slice(1,4)) // => [2,3,4] 截取的范围,含头不含尾
Array.prototype.slice可以用来截取类数组元素,并以数组形式返回。
Array.prototype.slice.call( arguments ), 省略第一个参数,截取全部。
String.prototype.slice()也是同样适用方法,返回截取的字符串片段,不改变原字符串
3、join和split
join所有的数组元素被转换成字符串,再用一个分隔符将这些字符串连接起来。
join接收一个参数,将转换后的元素以该参数连接成一个字符串
数组prototype的toString方法为,先将每个元素转换成字符串,然后拼接起来。如果join中不传参数,则效果和toString一样。
let arr = [1,false,[1],{}]
console.log(arr.join())
console.log(arr.toString())
split,将字符串以某个标志,分割成子字符串数组,并返回指定数目的片段。String.prototype.split
split(separator[,limit])
类数组
1、函数实参
2、dom集合
类数组的原型不是Array.prototype没有数组相关方法。
模拟一个类数组
let fakeArr = {
0: 1,
1: 2,
2: 3,
3: 4,
4: 5,
5: 6,
length: 6,
splice: Array.prototype.splice,
push: Array.prototype.push
}
push的实现:给对象添加当前length属性名,值为参数,然后改变length属性。实现过程见 数组篇 笔记
面试题
let obj = {
'2': 3,
'3': 4,
length: 2,
splice: Array.prototype.splice,
push: Array.prototype.push
}
obj.push(1)
obj.push(2)
console.log(obj) // => [empty *2, 1,2, splice: f() ,push :f()]
作业
写一个数组去重的方法
写一个typeof方法
返回所有原始值类型,引用值,Object还要分开 object 和 包装类