Javascript TypeScript Angular-将字符串添加到数字属性会导致值为零(0)
我正在使用Angular和Typescript,我想知道如果我在一个只接受数字的字段中添加一个字符串值,比如“hahah”,它绑定到数字类型的属性,它也不会触发或触发任何错误,而该字段的值将为零!我的意思是这对我来说很好,结果是零比结果是一个奇怪的值要好,但我只是好奇这是怎么回事 下面是我的typescript类的外观:Javascript TypeScript Angular-将字符串添加到数字属性会导致值为零(0),javascript,angular,typescript,Javascript,Angular,Typescript,我正在使用Angular和Typescript,我想知道如果我在一个只接受数字的字段中添加一个字符串值,比如“hahah”,它绑定到数字类型的属性,它也不会触发或触发任何错误,而该字段的值将为零!我的意思是这对我来说很好,结果是零比结果是一个奇怪的值要好,但我只是好奇这是怎么回事 下面是我的typescript类的外观: export class Article { public id: string; public price: number; public price2: nu
export class Article {
public id: string;
public price: number;
public price2: number;
}
这是我的template.html文件:
<div class="form-group">
<label class="control-label dash-control-label col-sm-3" for="">Price:</label>
<div class="col-sm-3">
<input type="text" class="form-control dash-form-control" id="" placeholder="" name="price" [(ngModel)]="article.price">
</div>
<label class="control-label dash-control-label col-sm-3" for="">Price 2:</label>
<div class="col-sm-3">
<input type="text" class="form-control dash-form-control" id="" placeholder="" name="price2" [(ngModel)]="article.price2">
</div>
</div>
价格:
价格2:
正如您所看到的,这些输入绑定到[(ngModel)]=“article.price”
和
[(ngModel)]=“article.price2”
当应用程序运行时,它们看起来是这样的:
但如果我输入这样的内容,一切都很好:
export function add(x: number, y: number): number {
if (typeof x !== 'number' || typeof y !== 'number') {
throw new TypeError('x and y need to be numbers');
}
return x + y;
}
当我发帖时,数据库中存储的值是:零(0)
为什么
为什么没有错误,比如我试图将字符串添加到数字或其他内容?
谢谢是的
Typescript更改值取决于属性类型,不会引发错误
像
因此,如果您传递字符串add(“aa”+“aa”)代码>返回0。因为函数参数(编号n,编号n2
)是类型。所以它在转换一个数字(如果它不是一个数字,那么它假设为0
)
建议:
更好的方法是可以在输入元素中使用type=“number”
而不是type=“text”
,以避免在输入框中键入任何字符串值
价格:
价格2:
类型脚本是javascript的超集,它添加了静态类型检查。
因此,您在typescript中编写的所有代码都将在运行时在javascript中传输,而javascript没有类型安全性
Typescript主要在编译时执行在本例中,我们没有关于用户将键入什么的信息,因此在编译时无法检查它
打字脚本传输
如果你有这样的代码
function add(a: number, b: number) {
return a + b;
}
add('de', 'de');//compile error
typescript可以知道您调用的函数参数不正确,无法编译。
你可以随时玩它
在运行时我们将
function add(a, b) {
return a + b;
}
因此,如果库使用错误的参数调用它,则无法检查它或抛出错误
解决方法
如果Typescript在传输的版本上有如下类型保护,则可以通过Typescript解决此问题:
export function add(x: number, y: number): number {
if (typeof x !== 'number' || typeof y !== 'number') {
throw new TypeError('x and y need to be numbers');
}
return x + y;
}
对于可以很简单但对于类更复杂的基元类型
这是一个问题
但他们声称这与设计目标背道而驰
export function add(x: number, y: number): number {
if (typeof x !== 'number' || typeof y !== 'number') {
throw new TypeError('x and y need to be numbers');
}
return x + y;
}