Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度/字体脚本比较数字_Angular_Typescript_Compare_Logical Operators - Fatal编程技术网

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;
  }
}