我有这样的代码:

const rtf = new Intl.RelativeTimeFormat('en', { style: 'short', numeric: "auto" });

在 Safari/605.1.15 中触发错误:
TypeError: undefined is not a constructor (evaluating 'new Intl.RelativeTimeFormat('en', { style: 'short', numeric: "auto" })')

现代 JS 中的一个如何解决 Intl API 可能不存在的事实?

最佳答案

这种方法没有得到很好的支持。 Can I use RelativeTimeFormat?

javascript - 类型错误 : undefined is not a constructor (evaluating  'new Intl.RelativeTimeFormat(' en', { 样式 :  'short' , 数字: "auto"})')-LMLPHP

您可以做的是使用一个包来模拟您需要的功能,无论浏览器是什么。

我找到了你可以使用的 relative-time-format npm 包。

安装



使用

import RelativeTimeFormat from "relative-time-format"
import en from "relative-time-format/locale/en.json"

RelativeTimeFormat.addLocale(en)

// Returns "2 days ago"
new RelativeTimeFormat("en", {
  style: "long" // "long" is the default. Other options: "short", "narrow".
}).format(-2, "day")

要检查浏览器是否兼容:
if (Intl === void 0 || typeof Intl.RelativeTimeFormat !== 'function') {
   // Browser not compatible
}

选择 :
const rtf = (Intl &&
            Intl.RelativeTimeFormat &&
            new Intl.RelativeTimeFormat('en', {
               style: 'short',
               numeric: "auto",
            })) || false;

if (!rtf) {
   // Not compatible
}

关于javascript - 类型错误 : undefined is not a constructor (evaluating 'new Intl.RelativeTimeFormat(' en', { 样式 : 'short' , 数字: "auto"})'),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58283202/

10-11 11:50