黄子涵

查漏补缺——说说arguments

问题

如题所示

答案

相关源码:

export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if ((typeof time === 'string')) {
      if ((/^[0-9]+$/.test(time))) {
        // support "1548221490638"
        time = parseInt(time)
      } else {
        time = time.replace(new RegExp(/-/gm), '/')
      }
    }

    if ((typeof time === 'number') && (time.toString().length === 10)) {
      time = time * 1000
    }
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
    const value = formatObj[key]
    // Note: getDay() returns 0 on Sunday
    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
    return value.toString().padStart(2, '0')
  })
  return time_str
}

这段代码里有这样的一行代码:

if (arguments.length === 0)

这里的arguments表示什么意思?

JavaScript进阶讲解五—>js中的arguments

js的arguments到底是什么?

原来它是类数组对象,不过,这里面的内容有点多,以后再回来看看,现在单独把这个函数拎出来研究一下:

function hzhParseTime(hzhTime, hzhFormat) {
    if(arguments.length === 0) {
        console.log("黄春钦将打印以下内容:")
        console.log("第一次打印arguments:" + arguments)
        console.log("第二次打印arguments的长度:" + arguments.length)
        console.log("arguments[0] =" + arguments[0])
        console.log("arguments[1] =" + arguments[1])
        return null
    }
    console.log("黄子涵将打印以下内容:")
    console.log("第一次打印arguments的长度:" + arguments.length)
    console.log("第一次打印arguments:" + arguments)
    console.log("arguments[0] =" + arguments[0])
    console.log("arguments[1] =" + arguments[1])
}

hzhParseTime("黄子涵","黄春钦");
[Running] node "e:\HMV\JavaScript\JavaScript.js"
黄子涵将打印以下内容:
第一次打印arguments的长度:2
第一次打印arguments:[object Arguments]
arguments[0] =黄子涵
arguments[1] =黄春钦

[Done] exited with code=0 in 0.836 seconds
function hzhParseTime(hzhTime, hzhFormat) {
    if(arguments.length === 0) {
        console.log("黄春钦将打印以下内容:")
        console.log("第一次打印arguments:" + arguments)
        console.log("第二次打印arguments的长度:" + arguments.length)
        console.log("arguments[0] =" + arguments[0])
        console.log("arguments[1] =" + arguments[1])
        return null
    }
    console.log("黄子涵将打印以下内容:")
    console.log("第一次打印arguments的长度:" + arguments.length)
    console.log("第一次打印arguments:" + arguments)
    console.log("arguments[0] =" + arguments[0])
    console.log("arguments[1] =" + arguments[1])
}

hzhParseTime();
[Running] node "e:\HMV\JavaScript\JavaScript.js"
黄春钦将打印以下内容:
第一次打印arguments:[object Arguments]
第二次打印arguments的长度:0
arguments[0] =undefined
arguments[1] =undefined

[Done] exited with code=0 in 0.284 seconds

从这个简单的实验可以看出,这个类数组对象有length属性,也就是这个类数组的长度,这个长度取决于函数传递的参数,点到为止,以后在慢慢研究。

posted @ 2022-07-01 17:03  黄子涵  阅读(20)  评论(0)    收藏  举报