我有一个下拉列表,允许用户选择一个值。当所选项目发生更改时,它会调用我的组件中的一个函数(onDropdownChange
)。传递给onDropdownChange
的值可以是字符串(“请选择一个选项”)或所选值的索引号。
这是我的TypeScript文件中的onDropdownChange:
onDropdownChange(id: any) {
if(Number.isNaN(id)){
this.selectedIndex = null;
this.isItemSelected = false;
}
else{
this.selectedIndex = id;
this.isItemSelected = true;
}
}
当id的值为“请选择一个选项”时,isNaN
会返回false
。为什么呢?
当我使用'+'一元运算符在下面的代码中返回字符串的数字表示时,isNan
正确返回true
。为什么呢?
onDropdownChange(id: any) {
// convert id to a number representation using '+'
if(Number.isNaN(+id)){
this.selectedIndex = null;
this.isItemSelected = false;
}
else{
this.selectedIndex = id;
this.isItemSelected = true;
}
}
以下是我的html模板中的相关代码:
<select class="form-control" (change)="onItemChange($event.target.value)">
<option> Please select </option>
<option *ngFor="let item of items; let i=index" [value]="i" [selected]="i === selectedIndex"> Item {{i+1}}</option>
</select>
答案 0 :(得分:2)
Number.isNaN()方法确定传递的值是否为NaN,其类型是否为Number。它是原始的全局isNaN()的一个更强大的版本。
如果id
是字符串,那么它不是数字,因此Number.isNaN()
返回false:
console.log(Number.isNaN('Please select an option'));
console.log(Number.isNaN('foo'));
&#13;
唯一一次使用Number.isNaN()
的时候,您基本上要查看someVariable === NaN
是否NaN !== NaN
,因为isNaN
而不能自行运作。
对于您的情况,只需使用普通console.log(isNaN('Please select an option'));
console.log(isNaN('foo'));
:
axis.POSIXct(1, at=seq(as.Date("2010-01-01"), as.Date("2018-01-01"),length.out=10),
format="%Y-%m-%d",
las=2,
adj=1,
xpd=TRUE,
cex.axis = 1)
&#13;
答案 1 :(得分:2)
isNaN(id) === Number.isNaN(+id)
只有x
的{{1}}值只有Number.isNaN(x)评估为真:NaN
:
console.log( Number.isNaN( NaN ) );
console.log( Number.isNaN( 'foo' ) );
console.log( Number.isNaN( {} ) );
console.log( isNaN( '5' ) );
console.log( Number.isNaN( 0 ) );
&#13;
这与全局isNaN函数形成对比,后者在将true
强制转换为数字之后返回NaN
的任何内容:
console.log( isNaN( NaN ) );
console.log( isNaN( 'foo' ) );
console.log( isNaN( {} ) );
console.log( isNaN( '5' ) );
console.log( Number.isNaN( 0 ) );
&#13;
这两个函数都不是为了测试它们的参数是不是number
。它们都用于测试他们的参数 是 数字NaN
。