【发布时间】:2021-05-12 02:32:11
【问题描述】:
例如,以下两个 javascript 对象的属性包括“name”、“age”和“phoneNumber”。
const personA = {
name: Andy,
age: "24",
phoneNumber: "28173516374"
}
const personB = {
name: "Amy",
age: 25,
phoneNumber: "+85 28173516374"
}
对于属性“phoneNumber”,我不希望其他人将它与运算符“===”一起使用以与其他字符串(如personA.phoneNumber === personB.phoneNumber)进行比较,因为对于 phoneNumber 的值,它应该与或没有前置国家代码。对于其他没有这方面知识背景的开发者,他们可能会使用=== 来比较两个变量与电话号码的值,这会产生一些错误。
所以我需要一种方法来限制 === 在特定属性上的使用。我想出了几个解决方案,但它们或多或少都有缺点。
解决方案1:将代表电话号码的所有属性的类型从string转换为类PhoneNumber,该类将处理所有比较和值格式。但是,我必须使用new 来创建该对象,并且应该修改很多地方。因为这个属性在我的项目中无处不在。尝试了几次后,我放弃了这个解决方案。
解决方案2:使用通用函数比较两个电话号码。正如我之前所说,并非所有开发人员和审阅者都知道该功能。即使我在文件中提到它,仍然有人忘记它。
现在我正在尝试开发一个 eslint 规则来限制 === 在特定属性上的使用。你有其他想法吗?
【问题讨论】:
-
可能不会,这真的很奇怪。那么,如何才能访问这样的财产呢?
-
例如,一个对象有一个名为
phoneNumber的属性。众所周知,前面加或不加国家代码的两个电话号码是一样的,所以不能简单的跟===比较。我们应该调用一个函数来进行比较。但是,我无法确定其他人是否具备这些背景知识。 -
您可能希望为此创建一个类并为其提供类似于 checkPhoneNumberMatches 方法的内容。
-
有没有你的项目有这样一个比较电话号码的功能?
标签: javascript typescript ecmascript-6