इस MDN पृष्ठ पर [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find] इस polyfill है:क्या कोई इस Array.prototype.find() polyfill को समझा सकता है?
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
enumerable: false,
configurable: true,
writable: true,
value: function(predicate) {
if (this == null) {
throw new TypeError('Array.prototype.find called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
if (i in list) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return value;
}
}
}
return undefined;
}
});
}
मेरे सवाल है के लिए इन पंक्तियों क्या कर रहे हैं:
var list = Object(this);
var length = list.length >>> 0;
this
के बाद निश्चित रूप से एक सरणी (हम Array.prototype बढ़ाने कर रहे हैं) तो क्यों सुनिश्चित करें कि length
संख्यात्मक है, और ऑब्जेक्ट() का उपयोग क्यों किया जाता है?
इस polyfill के साथ परेशानी यह है कि ऐसा करना आवश्यक हो तो मैं यह कर सकता है Object.defineProperty विधि, जो पुराने ब्राउज़र में उपलब्ध नहीं है जो खोजने को लागू नहीं करती हैं। – kennebec
जैसा कि उत्तर इंगित किया गया है; 'यह' एक सरणी होने की गारंटी नहीं है, आप निम्न उत्तर में देख सकते हैं कि यह क्या हो सकता है (यदि आपको प्रदान किए गए टीजे से अधिक जानकारी चाहिए): http://stackoverflow.com/a/16063711/1641941 (नीचे 'यह चर ') – HMR