JavaScript 字符串方法 localeCompare() 接受'undefined'并拒绝'null'作为'locale'参数



我找到了一些自然排序字符串的方法

const rows = ['37-SK', '4-ML', '41-NP', '2-YZ', '21', '26-BF'];
console.log(rows.sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })));

输出如下:

0: "2-YZ"
1: "4-ML"
2: "21"
3: "26-BF"
4: "37-SK"
5: "41-NP"
length: 6
[[Prototype]]: Array(0)

但是当我用null替换undefined时

console.log(rows.sort((a, b) => a.localeCompare(b, null, { numeric: true, sensitivity: 'base' })));

输出:

Uncaught TypeError: Cannot convert undefined or null to object
at String.localeCompare (<anonymous>)
at natSort.js:2:35
at Array.sort (<anonymous>)
at natSort.js:2:18

为什么?

规范就是这样写的。如果第二个参数(locale字符串)是undefined,则假定它是系统默认值。如果它不是undefined,那么它必须是一个具有适当的语言环境信息的字符串,否则是一个错误。

edit—如注释中所述,locale参数也可以是一个已经初始化的locale列表对象。然而,undefined仍然可以工作,而null则不能。

String#localeCompare接受三个参数:

参数名称 期望值
compareString 比较referenceStr的字符串
localesoptions 这些参数自定义函数的行为,并让应用程序指定应该使用其格式约定的语言。在忽略localesoptions参数的实现中,使用的区域设置和返回的字符串形式完全依赖于实现。

有关这些参数以及如何使用它们的详细信息,请参阅Intl.Collator()构造函数

相关内容

  • 没有找到相关文章

最新更新