我在浏览angular文档时遇到了这个:
https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js L1556
注意this.$viewValue = Number.NaN;
不仅在本文档中,在其他angular文档中也是如此。
与将其设置为undefined
或null
相比,这样做的优点/缺点是什么?
在AgularJS中:
viewValue美元视图中的实际字符串值。
modelValue美元控件绑定到的模型中的值。
所以,如果你有一个输入,它里面的值是字符串的形式。如果将模型值或插值值显示为标记、{{ myInt }}
或{{ 5 + 5 }}
,则以字符串形式显示。
这是因为HTML是文本语言,而JS是函数和值语言。因此,为了处理这种双绑定的双重模式,AngularJS使用$viewValue服务作为模型字段的"显示"值,并使用$modelValue
来跟踪"实际"值。
"display"值永远不应该是"undefined",因为未定义模型的插值不应该引发错误。而且"显示"值永远不应该是数字。因此,在它是一个正式字符串($modelValue
的插值)之前,它是一个NaN
。
我猜他们使用Nan是因为,根据ECMAScript语言规范第4.3.23节Nan被定义为:
number value that is a IEEE 754 “Not-a-Number” value
所以它是一个数字,而不是未定义或null。该值将在第8.3节
中进一步解释。与NaN的相等比较在章节11.9.3中定义:
The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows: If Type(x) is Number, then:
If x is NaN, return false.
If y is NaN, return false.
因此,为了便于比较,应该使用isNaN():
isNaN(NaN)
// true