我想拼接数字,如果是值> 12,但没有工作。
public preventNum(e){
let selectedNumber = e.target.value;
if (selectedNumber > 12) {
selectedNumber = selectedNumber.slice(0, 1)
}
else {
console.log('else')
}
}
<timepicker
[(ngModel)]="selectedTime"
(keyup)="preventNum($event)" >为什么不工作?当我console.log时,selectedNumber数被拼接,但值在输入中停留。
如果输入15,我想拼接成一个数字.
我也尝试连接selectedTime,但那是日期类型,不能在日期上应用拼接。
selectedNumber是拼接的,但在输入停留。
发布于 2022-02-18 04:04:22
您正在尝试混合数据类型,并得到不好的结果。让我们一次拿一片:
event.target.value虽然您的代码示例不包括此部分,但我确信您的事件是来自HTML的更改或输入事件。对于大多数HTML输入类型,包括文本输入,值将为String类型。
这意味着这段代码会给您带来糟糕的结果:
selectedNumber > 12为什么?因为像>和<这样的不等式运算符通常只能在两个操作数都是数字(或数字,比如日期--它不包括日期的字符串表示)时使用。只有在编写需要比较字符串的自定义排序函数时才应该忽略此规则。您没有在此示例中进行排序,因此适用该规则。
要解决这个问题,您应该将原始值从字符串转换为实际数字,如下所示:
let selectedNumber = parseInt(event.target.value)(如果您想使用小数,请使用parseFloat。)
slice来实现作为一个实际问题,遵循我的第一个建议将迫使您停止使用slice,因为数字没有切片方法。
正确的解决办法取决于你想要完成什么,我不知道你的目标是什么。
对您的代码示例的慈善解释是:“如果数字大于12,则只保留最重要的数字。”
您的代码示例的其余部分向我表明,您正在尝试做与12小时时钟相关的数学,这使我认为我刚才描述的逻辑不是实现目标的唯一甚至最好的方法。
我有一种预感,你想要做的是弄清楚用户给你的时间是在中午之前还是之后。如果这是正确的,那么这样的代码和更好的数据设计就更清晰了:
let isMorning = selectedNumber < 12
let isAfternoon = selectedNumber >= 12如果我误解了你的目标,你可以更详细地解释你的目标。
还有一个一般性的注意事项:仔细选择你的数据类型。Javascript提供了各种基本数据类型:字符串、数字、日期和布尔值。您必须就如何表示应用程序所需的数据作出决定。如果选择最适合所需数据的本机数据类型,则总会得到最好的结果。
为了说明我的观点,下面是一些非常糟糕的想法的例子,千万不要做这些事情:
choice)
1 = yes和0 = no (布尔值是正确的--一个数量作为字符串,例如let sheepCount = "5" (Number是正确的choice)rowId = 5 (在Javascript中,ID应该总是以字符串的形式存储)https://stackoverflow.com/questions/68998313
复制相似问题