美文网首页
在 JavaScript 中处理数字和日期输入的方法

在 JavaScript 中处理数字和日期输入的方法

作者: 涅槃快乐是金 | 来源:发表于2024-05-28 22:30 被阅读0次

valueAsNumber

你可能之前写过这样的代码:

export function NumberInput() {
  const [number, setNumber] = useState(0)

  return (
    <input
      type="number"
      value={number}
      onChange={(e) => {
        const num = parseFloat(e.target.value)
        setNumber(num)
      }}
    />
  )
}

这样写没有问题,但其实有一种更好的方式来读取数字值。

我指的是这部分代码:

// 🚩 不必要的解析!
const num = parseFloat(e.target.value)

没错,自从 IE10 时代开始,我们就有了更好的方式来获取和设置数字值:

// 🤯
const num = e.target.valueAsNumber

因此,更好的解决方案可以是:

export function NumberInput() {
  const [number, setNumber] = useState(0)

  return (
    <input
      type="number"
      value={number}
      onChange={(e) => {
        // ✅
        const num = e.target.valueAsNumber
        setNumber(num)
      }}
    />
  )
}

当然,你不需要用 React 来实现这一点。这只是标准的 JavaScript,适用于任何框架。

你同样可以查询一个 DOM 节点并使用它:

const myInput = document.querySelector('input.my-input')
const number = myInput.valueAsNumber

而且,重要的是,你也可以对其进行写操作!

myInput.valueAsNumber = 123.456

一个小陷阱

valueAsNumber 的类型总是一个数字。因此,如果输入当前没有设置任何值,你将会得到 NaN 作为值。

别忘了…

typeof NaN // 'number'

是的,这是 JavaScript 中有趣的部分之一。因此,在将 valueAsNumber 写入期望实际数字的地方之前,确保检查它是否为 NaN

const number = myInput.valueAsNumber
if (!isNaN(number)) {
  // 我们实际上有一个“数字”数字
}

valueAsDate

但等等,还有更多!

对于日期输入,我们还有一个很方便的 valueAsDate 属性:

export function DateInput() {
  const [date, setDate] = useState(null)

  return (
    <input
      type="date"
      value={date}
      onChange={(e) => {
        // ✅
        const date = e.target.valueAsDate
        setDate(date)
      }}
    />
  )
}

很漂亮。

对于那些不使用 React(或者性能更好的 Qwik,它看起来像 React),你当然也可以用纯 HTML 和 JavaScript 来实现:

const myDateInput = document.querySelector('input.my-date-input')
const date = myDateInput.valueAsDate

正如预期的那样,你也可以对其进行写操作:

myDateInput.valueAsDate = new Date(0)

没有陷阱

幸运的是,对于 valueAsDate,当输入为空时,我们得到的只是 null

所以你只需检查值是否为真值:

const date = myDateInput.valueAsDate
if (date) {
  // 我们得到了一个日期!
}

浏览器支持

这并不是什么新的API。即使这是你第一次了解到这些属性,它们已经存在很多年了,甚至可以追溯到 IE10 时代。

结论

现在我们知道如何使用 valueAsNumbervalueAsDate 属性来将数字和日期输入分别处理为真正的数字和日期值。

相关文章

  • 国际化(Internationalization)和本地化(Lo

    根据用户的本地语言,处理文本的输入和输出。 处理不同的日期,时间,数字显示格式 利用合适的日历和时区处理日期。 把...

  • JavaScript|对象

    对象: JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在 JavaScript 中,...

  • JavaScript 对象 、函数

    JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在 JavaScript 中,对象是拥...

  • 面向对象的简单了解

    JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在 JavaScript 中,对象是拥...

  • JavaScript 对象

    JavaScript中的所有事物都是对象:字符串,数字,数组,日期,等等。 在JavaScript中,对象是拥有属...

  • 7、初识对象

    什么是对象: JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。在 JavaScript...

  • 如何在execl中输入1-2, 1:4之类的数值

    在execl中输入数字-数字都会被默认为日期,数字:数字都会被默认为时间。 所以当输入之后发现不是自己想要的结果。...

  • 数字、日期和时间的输入

    数字 输入整数例如,输入手机号码时,当输入的数值长度超过了单元格的宽度时,则Excel会默认以科学记数法的形式显示...

  • 廖雪峰的JS教程3-标准对象

    标准对象 Date 在JavaScript中,Date对象用来表示日期和时间。 要获取系统当前时间,用: 方法一:...

  • JavaScript入门笔记

    数字 在 JavaScript 中定义数字实际上非常简单。数字数据类型包括任何正负整数以及小数。向控制台中输入数字...

网友评论

      本文标题:在 JavaScript 中处理数字和日期输入的方法

      本文链接:https://www.haomeiwen.com/subject/wmekqjtx.html