2012-05-01 7 views
10

UnderscoreJS में हुड के नीचे देखते हुए, मैं देख रहा हूँ:अंडरस्कोरजेएस टाइप करने के बजाय toString.call() का उपयोग क्यों करता है?

_.isFunction = function(obj) { 
    return toString.call(obj) == '[object Function]'; 
    }; 

    _.isString = function(obj) { 
    return toString.call(obj) == '[object String]'; 
    }; 

    _.isNumber = function(obj) { 
    return toString.call(obj) == '[object Number]'; 
    }; 

यह एक अजीब विकल्प की तरह लगता है। यह निर्धारित करने के लिए कि टाइप एक स्ट्रिंग, फ़ंक्शन या नंबर है या नहीं, टाइपफ़ोफ़ का उपयोग क्यों न करें? ToString का उपयोग कर प्रदर्शन प्रदर्शन है? क्या पुराने ब्राउज़र द्वारा टाइप नहीं किया गया है?

+0

'टाइपोफ़' 1 99 6 में संस्करण 1.1 के बाद जावास्क्रिप्ट के प्रत्येक संस्करण में मौजूद है। –

उत्तर

13

वास्तव में ऐसा इसलिए है क्योंकि toString के साथ जांच करके [[Class]] जांचना तेज़ है। इसके अलावा, कम गलतियाँ हो सकता है के बाद से toString आप सटीक कक्षा देता है ...

जाँच करें:

http://jsperf.com/underscore-js-istype-alternatives

:

var fn = function() { 
    console.log(typeof(arguments)) // returns object 
    console.log(arguments.toString()) // returns object Arguments 
} 

आप यहाँ toString बनाम अंडरस्कोर typeof के लिए बेंचमार्क देख सकते हैं

बेहतर व्याख्या के साथ कुछ गिथब मुद्दे भी हैं:

https://github.com/documentcloud/underscore/pull/332

https://github.com/documentcloud/underscore/pull/321

संपादित करें 1:

आप भी इस महान लेख की जांच कर सकता:

http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/

+0

ग्रेट संदर्भ। धन्यवाद! –

+1

/! \ Http://jsperf.com/underscore-js-istype-alternatives/7 (? DriverDan का उत्तर) – BeauCielBleu

2

drinchev के उत्तर आंशिक रूप से सही है। toString वर्तमान में अधिकतर अधिकांश ब्राउज़रों में typeOf का उपयोग करने से धीमा है। See the 7th revision of the test he posted जो टाइपऑफ का उपयोग करता है। दोनों अभी भी बहुत तेज़ हैं, हालांकि ज्यादातर मामलों में यह प्रदर्शन अंतर ध्यान देने योग्य नहीं होगा और ट्रेडऑफ बतख टाइपिंग/टाइपऑफ से बेहतर चश्मे के अनुरूप है।

Underscore pull request 321 (वह ड्रिनचेव सूचीबद्ध) ट्रेडऑफ की गहन चर्चा है और उन्होंने टूस्ट्रिंग का उपयोग करने का निर्णय क्यों लिया।

संबंधित मुद्दे

 संबंधित मुद्दे