【发布时间】:2022-02-16 18:15:53
【问题描述】:
所以,我有这个方法来检查一个对象是否有特定的状态:
export const verifyStatus = (productStatus: string, expectedStatus: string): boolean => {
return productStatus.split(' ').some((status) => expectedStatus.includes(status));
};
我将以此作为我的价值观:
const productStatus = 'POTATO BANANA TOMATO LETTUCE'
const expectedStatus = 'EGG'
奇怪的是,这是假的:
'POTATO BANANA TOMATO LETTUCE'
.split(' ')
.some((status) => 'EGG'.includes(status));
这是真的(注意 POTATO 和 BANANA 之间的双空格)
'POTATO BANANA TOMATO LETTUCE'
.split(' ')
.some((status) => 'EGG'.includes(status));
但是,尽管有任何双空格,这仍然有效(如果我将 EGG 添加到我的第一个字符串,则为 true,如果我删除,则为 false):
'POTATO BANANA TOMATO LETTUCE'
.split(' ')
.some((status) => status.includes('EGG'));
'POTATO BANANA TOMATO LETTUCE'
.split(' ')
.some((status) => status.includes('EGG'));
为什么会这样?我错过了什么吗?我使用这种方法大约 5 个月,直到几个小时前它都可以正常工作。
【问题讨论】:
-
因为
"EGG".includes("")是true。当你遇到这种事情时,我建议在调试器中单步执行它,看看发生了什么。 -
使用
"EGG".includes(status)的代码和使用status.includes("EGG")的代码做了非常不同的事情。你真的想要子字符串匹配吗?
标签: javascript node.js typescript