2014-05-22 9 views
8

मैं कोणीय डॉक्स के माध्यम से जा रहा था जब मैं इस में भाग:AngularJS और Number.NaN

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

सूचना है कि this.$viewValue = Number.NaN;

इस डॉक में है, लेकिन अन्य कोणीय डॉक्स में के रूप में अच्छी ही नहीं।

इसे इस तरह से करने का लाभ/नुकसान क्या है इसे बस undefined या null के रूप में सेट करना?

उत्तर

5

AgularJS में विशिष्ट शब्द:

$ व्यू वैल्यू

दृश्य में वास्तविक स्ट्रिंग मान।

$ modelValue

मॉडल में मूल्य, कि नियंत्रण के लिए बाध्य है।

तो, यदि आपके पास इनपुट है, तो इसके भीतर का मान एक स्ट्रिंग के रूप में है। यदि आप मार्कअप, {{ myInt }} या {{ 5 + 5 }} के रूप में मॉडल मान या इंटरपोलेटेड मान प्रदर्शित करते हैं, तो इसे स्ट्रिंग के रूप में प्रदर्शित किया जाएगा।

ऐसा इसलिए है क्योंकि HTML टेक्स्ट की भाषा है, जबकि जेएस कार्य और मूल्यों की एक भाषा है। इसलिए, डबल बाध्यकारी के लिए इस दोहरी मोड को संभालने के लिए, AngularJS एक मॉडल फ़ील्ड के "प्रदर्शन" मान के लिए $ व्यू वैल्यू सेवा का उपयोग करता है और "वास्तविक" मान को ट्रैक करने के लिए $modelValue का उपयोग करता है।

"प्रदर्शन" मान कभी भी "अपरिभाषित" नहीं होना चाहिए, क्योंकि एक अपरिभाषित मॉडल के इंटरपोलेशन को कोई त्रुटि नहीं उठानी चाहिए। और "प्रदर्शन" मान कभी भी एक संख्या नहीं होना चाहिए। तो, इससे पहले कि यह एक औपचारिक स्ट्रिंग है ($modelValue का इंटरपोलेशन), यह NaN है।

2

मेरा अनुमान होगा कि वे नेन, क्योंकि Section 4.3.23 of ECMAScript Language Specification के अनुसार NaN के रूप में परिभाषित किया गया है का उपयोग करें:

number value that is a IEEE 754 “Not-a-Number” value 

तो यह एक संख्या है और कुछ अपरिभाषित या नल है। मूल्य NaN साथ Section 8.3

समानता तुलना में आगे बताया गया है Section 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