作业
    1、判断是否为闰年,闰年是为了补上人为设立的日历与地球实际公转的时间差。分为普通闰年(被4整除)、世纪闰年(被400整除)
    四年一闰,百年不闰,四百年再闰

    1. function isLeapYear(year){
    2. if(year % 4 === 0 && year % 100 !== 0){
    3. return true
    4. }else if(year % 400 === 0){
    5. return true
    6. }else{
    7. return false
    8. }
    9. }

    2、符号优先级

    1. new Foo.getName() // '.' 运算符优先级大于 new运算符
    2. new Foo().getName() // '()' 运算符优先级高于 '.'运算符;new 运算符 和Foo方法一并执行,
    3. //变成了调用Foo构造函数的实例的getName方法

    数组方法
    1、concat
    用于合并两个或多个数组,不改变原有数组,生成返回一个新的数组

    2、slice(切下),截取指定范围元素,以数组形式返回,不改变原数组
    接受两个参数,
    start,指定截取开始位置,可正可负。
    end,指定截取结束位置(不包含该位置元素),可正可负。但是一直都是指定下标。
    如果start和end不包含元素,则返回空数组

    1. let arr = [1,2,3,4,5]
    2. 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一样。

    1. let arr = [1,false,[1],{}]
    2. console.log(arr.join())
    3. console.log(arr.toString())

    split,将字符串以某个标志,分割成子字符串数组,并返回指定数目的片段。String.prototype.split
    split(separator[,limit])

    类数组
    1、函数实参
    2、dom集合
    类数组的原型不是Array.prototype没有数组相关方法。
    模拟一个类数组

    1. let fakeArr = {
    2. 0: 1,
    3. 1: 2,
    4. 2: 3,
    5. 3: 4,
    6. 4: 5,
    7. 5: 6,
    8. length: 6,
    9. splice: Array.prototype.splice,
    10. push: Array.prototype.push
    11. }

    push的实现:给对象添加当前length属性名,值为参数,然后改变length属性。实现过程见 数组篇 笔记

    面试题

    1. let obj = {
    2. '2': 3,
    3. '3': 4,
    4. length: 2,
    5. splice: Array.prototype.splice,
    6. push: Array.prototype.push
    7. }
    8. obj.push(1)
    9. obj.push(2)
    10. console.log(obj) // => [empty *2, 1,2, splice: f() ,push :f()]

    作业
    写一个数组去重的方法
    写一个typeof方法
    image.png
    返回所有原始值类型,引用值,Object还要分开 object 和 包装类