Angularjs and Number.NaN



我在浏览angular文档时遇到了这个:

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js L1556

注意this.$viewValue = Number.NaN;

不仅在本文档中,在其他angular文档中也是如此。

与将其设置为undefinednull相比,这样做的优点/缺点是什么?

在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

最新更新