Angular 角度/字体脚本比较数字
嗨,我在比较两个变量时遇到问题:Angular 角度/字体脚本比较数字,angular,typescript,compare,logical-operators,Angular,Typescript,Compare,Logical Operators,嗨,我在比较两个变量时遇到问题: console.log(simulation.population == 40000000); //true console.log(simulation.initialInfectedNumber == 5); //true console.log(simulation.population < simulation.initialInfectedNumber); //true 有人能解释一下它是怎么工作的吗?(因为40mln不小于5:P),可能这个
console.log(simulation.population == 40000000); //true
console.log(simulation.initialInfectedNumber == 5); //true
console.log(simulation.population < simulation.initialInfectedNumber); //true
有人能解释一下它是怎么工作的吗?(因为40mln不小于5:P),可能这个变量中有字符串,但当这个变量是数字时,它是如何可能的
编辑:
获取所有模拟对象
服务:
public getAllSimulations(): Observable<Seirds[]> {
return this.httpClient.get<Seirds[]>(this.url + '/all');
}
API响应:
[
{
"id": 1,
"name": "example name",
"population": 40000000,
"initialInfectedNumber": 5,
"daysOfSimulation": 2,
"reproductionRate": 3.0,
"immunityTime": 60.0,
"incubationTime": 4.0,
"naturalDeathRate": 0.0,
"quarantineRate": 0.5,
"birthRate": 0.0,
"diseaseDuration": 15.0,
"diseaseDeathRate": 0.1,
"reductionByRestrictions": 0.2,
"percentageOfPopulationWhenRestrictionsBegins": 1.0,
"daysOfRestrictions": 30.0,
"infectiousTime": 7.0,
"timeOfOnsetOfSymptoms": 5.0,
"timeOfDyingFromIncubation": 8.0,
"records": [
{
"susceptible": 39999995,
"exposed": 5,
"infected": 0,
"recovered": 0,
"deaths": 0,
"quarantined": 0
},
{
"susceptible": 39999993,
"exposed": 2,
"infected": 5,
"recovered": 0,
"deaths": 0,
"quarantined": 1
}
]
},
{
"id": 2,
"name": "example name",
"population": 40000000,
"initialInfectedNumber": 5,
"daysOfSimulation": 2,
"reproductionRate": 3.0,
"immunityTime": 60.0,
"incubationTime": 4.0,
"naturalDeathRate": 0.0,
"quarantineRate": 0.5,
"birthRate": 0.0,
"diseaseDuration": 15.0,
"diseaseDeathRate": 0.1,
"reductionByRestrictions": 0.2,
"percentageOfPopulationWhenRestrictionsBegins": 1.0,
"daysOfRestrictions": 30.0,
"infectiousTime": 7.0,
"timeOfOnsetOfSymptoms": 5.0,
"timeOfDyingFromIncubation": 8.0,
"records": [
{
"susceptible": 39999995,
"exposed": 5,
"infected": 0,
"recovered": 0,
"deaths": 0,
"quarantined": 0
},
{
"susceptible": 39999993,
"exposed": 2,
"infected": 5,
"recovered": 0,
"deaths": 0,
"quarantined": 1
}
]
}
]
服务组件:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SeirdsService {
private url = 'http://localhost:8080/api/seirds';
constructor(private httpClient: HttpClient) { }
public getAllSimulations(): Observable<Seirds[]> {
return this.httpClient.get<Seirds[]>(this.url + '/all');
}
public addSimulation(simulation: Seirds): Observable<Seirds> {
return this.httpClient.post<Seirds>(this.url, simulation);
}
public updateSimulation(simulation: Seirds): Observable<Seirds> {
return this.httpClient.put<Seirds>(this.url, simulation);
}
public deleteSimulation(id: number): void {
let endpoint = "/" + id;
this.httpClient.delete(this.url + endpoint).subscribe();
}
}
export class SeirdsRecord {
susceptible: number;
exposed: number;
infected: number;
recovered: number;
deaths: number;
quarantined: number;
}
export class Seirds {
id: number;
name: string;
population: number;
initialInfectedNumber: number;
daysOfSimulation: number;
reproductionRate: number;
immunityTime: number;
incubationTime: number;
naturalDeathRate: number;
quarantineRate: number;
birthRate: number;
diseaseDuration: number;
diseaseDeathRate: number;
reductionByRestrictions: number;
percentageOfPopulationWhenRestrictionsBegins: number;
daysOfRestrictions: number;
infectiousTime: number;
timeOfOnsetOfSymptoms: number;
timeOfDyingFromIncubation: number;
records: SeirdsRecord[];
}
从'@angular/common/http'导入{HttpClient};
从“@angular/core”导入{Injectable};
从“rxjs”导入{Observable};
@注射的({
providedIn:'根'
})
导出类SeirdsService{
专用url=http://localhost:8080/api/seirds';
构造函数(私有httpClient:httpClient){}
public getAllSimulations():可观察{
返回this.httpClient.get(this.url+'/all');
}
公共模拟(模拟:Seirds):可观察{
返回this.httpClient.post(this.url,simulation);
}
公共更新模拟(模拟:Seirds):可观察{
返回this.httpClient.put(this.url,模拟);
}
公共删除模拟(id:编号):无效{
让endpoint=“/”+id;
this.httpClient.delete(this.url+endpoint.subscribe();
}
}
出口类SeirdsRecord{
易感:数量;
暴露:数量;
感染人数:;
回收:数量;
死亡人数:;
检疫:编号;
}
出口类船舶{
id:编号;
名称:字符串;
人口:个;
initialInfectedNumber:编号;
模拟天数:数字;
繁殖率:个数;
免疫时间:数字;
孵化时间:编号;
自然病:数量;
检疫:编号;
出生率:数字;
病程:个数;
病态:数;
减少限制:数量;
限制开始时的人口百分比:数量;
日期限制:数量;
感染时间:个数;
症状出现的时间:次数;
孵化时间:个数;
记录:SeirdsRecord[];
}
您对模拟对象有“问题”,首先,您需要与==
进行比较,而不是与=
比较值和类型。现在,在模拟对象上有表示字符串的值,然后比较字符串和数字
const simulation = { population: 40000000 , initialInfectedNumber: 5 };
console.log(simulation.population === 40000000); //true
console.log(simulation.initialInfectedNumber === 5); //true
console.log(simulation.population < simulation.initialInfectedNumber); // false
感谢@KennyXu的注释,该注释表明typescript在运行时未进行检查。确保您的API返回数字。Ye但我无法理解为什么我在数字类型变量中有字符串类型。听着editYep,Javascript有时会被弄糊涂,这就是为什么我们尝试使用类型(Typescript)。我编辑了我的答案,您的值转换方式有问题。typescript在运行时不检查类型。确保你的api返回数字。我在我的api中添加了部分响应到post,我非常确定这些变量是数字。根据你上面的代码,一切都正常。也许还有一件事你没有告诉我们,那就是产生真正的问题。
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SeirdsService {
private url = 'http://localhost:8080/api/seirds';
constructor(private httpClient: HttpClient) { }
public getAllSimulations(): Observable<Seirds[]> {
return this.httpClient.get<Seirds[]>(this.url + '/all');
}
public addSimulation(simulation: Seirds): Observable<Seirds> {
return this.httpClient.post<Seirds>(this.url, simulation);
}
public updateSimulation(simulation: Seirds): Observable<Seirds> {
return this.httpClient.put<Seirds>(this.url, simulation);
}
public deleteSimulation(id: number): void {
let endpoint = "/" + id;
this.httpClient.delete(this.url + endpoint).subscribe();
}
}
export class SeirdsRecord {
susceptible: number;
exposed: number;
infected: number;
recovered: number;
deaths: number;
quarantined: number;
}
export class Seirds {
id: number;
name: string;
population: number;
initialInfectedNumber: number;
daysOfSimulation: number;
reproductionRate: number;
immunityTime: number;
incubationTime: number;
naturalDeathRate: number;
quarantineRate: number;
birthRate: number;
diseaseDuration: number;
diseaseDeathRate: number;
reductionByRestrictions: number;
percentageOfPopulationWhenRestrictionsBegins: number;
daysOfRestrictions: number;
infectiousTime: number;
timeOfOnsetOfSymptoms: number;
timeOfDyingFromIncubation: number;
records: SeirdsRecord[];
}
const simulation = { population: 40000000 , initialInfectedNumber: 5 };
console.log(simulation.population === 40000000); //true
console.log(simulation.initialInfectedNumber === 5); //true
console.log(simulation.population < simulation.initialInfectedNumber); // false
this.service.getAllSimulations().subscribe(
values => { // <- I suppose this is an array with your payload and make sure pouplation and initialInfectedNumber are numbers
this.simulations = values.map((value) => new Seird(value.population, value. initialInfectedNumber));
}
)
class Seird {
population: number;
initialInfectedNumber: number;
constructor(population: number, initialInfectedNumber: number) {
this.population = population;
this.initialInfectedNumber = initialInfectedNumber;
}
}