javascript interview जावास्क्रिप्ट ऑब्जेक्ट विशेषताओं का डिफ़ॉल्ट मान सेट करें



javascript javascript eval atob(' dmf glx (11)

जावास्क्रिप्ट ऑब्जेक्ट की डिफ़ॉल्ट विशेषता सेट करने का कोई तरीका है जैसे कि:

var emptyObj = {};
// do some magic
emptyObj.nonExistingAttribute // => defaultValue

आईई को नजरअंदाज किया जा सकता है, क्रोम फ्रेम ने मुझे उस सिरदर्द से मुक्त कर दिया है।


Answer #1

मेरा कोड है:

function(s){
    s = {
        top: s.top || 100,    // default value or s.top
        left: s.left || 300,  // default value or s.left
    }
    alert(s.top)
}

Answer #2

यह निश्चित रूप से प्रोटोटाइप-आधारित वस्तुओं के सामान्य उपयोग की तरह लगता है:

// define a new type of object
var foo = function() {};  

// define a default attribute and value that all objects of this type will have
foo.prototype.attribute1 = "defaultValue1";  

// create a new object of my type
var emptyObj = new foo();
console.log(emptyObj.attribute1);       // outputs defaultValue1

Answer #3

चूंकि मैंने कई साल पहले सवाल पूछा था कि चीजें अच्छी तरह से बढ़ी हैं।

प्रॉक्सी ईएस 6 का हिस्सा हैं। निम्न उदाहरण क्रोम, फ़ायरफ़ॉक्स, सफारी और एज में काम करता है:

var handler = {
  get: function(target, name) {
    return target.hasOwnProperty(name) ? target[name] : 42;
  }
};

var p = new Proxy({}, handler);

p.answerToTheUltimateQuestionOfLife; //=> 42

प्रॉक्सी पर मोज़िला के दस्तावेज़ीकरण में और पढ़ें।


Answer #4

Object.create साथ वास्तव में यह संभव है। यह "गैर परिभाषित" गुणों के लिए काम नहीं करेगा। लेकिन उन लोगों के लिए जिन्हें डिफ़ॉल्ट मान दिया गया है।

var defaults = {
    a: 'test1',
    b: 'test2'
};

फिर जब आप अपनी गुण वस्तु बनाते हैं तो आप इसे ऑब्जेक्ट.क्रेट के साथ Object.create

properties = Object.create(defaults);

अब आपके पास दो ऑब्जेक्ट होंगे जहां पहली ऑब्जेक्ट खाली है, लेकिन प्रोटोटाइप defaults ऑब्जेक्ट को इंगित करता है। परीक्षा करना:

console.log('Unchanged', properties);
properties.a = 'updated';
console.log('Updated', properties);
console.log('Defaults', Object.getPrototypeOf(properties));

Answer #5

विनाशकारी का उपयोग करें (ईएस 6 में नया)

मोज़िला के साथ-साथ एक शानदार ब्लॉग पोस्ट द्वारा बहुत अच्छा प्रलेखन है जो सिंटैक्स को बेहतर तरीके से बता सकता है।

तुम्हारे प्रश्न का उत्तर देने के लिए

var emptyObj = {};
const { nonExistingAttribute = defaultValue } = emptyObj;
console.log(nonExistingAttribute); // defaultValue

आगे बढ़ते हुए

क्या मैं इस चर का नाम बदल सकता हूं? ज़रूर!

const { nonExistingAttribute: coolerName = 15} = emptyObj;
console.log(coolerName); // 15

नेस्टेड डेटा के बारे में क्या? जो है सामने रखो!

var nestedData = {
    name: 'Awesome Programmer',
    languages: [
        {
            name: 'javascript',
            proficiency: 4,
        }
    ],
    country: 'Canada',
};

var {name: realName, languages: [{name: languageName}]} = nestedData ;

console.log(realName); // Awesome Programmer
console.log(languageName); // javascript

Answer #6
Object.withDefault = (defaultValue,o={}) => {
  return new Proxy(o, {
    get: (o, k) => (k in o) ? o[k] : defaultValue 
  });
}

o = Object.withDefault(42);
o.x  //=> 42

o.x = 10
o.x  //=> 10
o.xx //=> 42

Answer #7

सभी समाधानों के सरलतम:

dict = {'first': 1,
        'second': 2,
        'third': 3}

अभी व,

dict['last'] || 'Excluded'

'बहिष्कृत' वापस आ जाएगा, जो डिफ़ॉल्ट मान है।


Answer #8

मैंने कल एक लेख देखा जो Object.__noSuchMethod__ का उल्लेख करता है Object.__noSuchMethod__ प्रॉपर्टी: JavascriptTips मुझे इसके साथ खेलने का मौका नहीं मिला है, इसलिए मुझे ब्राउज़र समर्थन के बारे में पता नहीं है, लेकिन हो सकता है कि आप इसे किसी भी तरह इस्तेमाल कर सकें?


Answer #9

जावास्क्रिप्ट में इसे सेट करने का कोई तरीका नहीं है - गैर-मौजूद गुणों के लिए undefined लौटने से मूल जावास्क्रिप्ट स्पेक का एक हिस्सा है। इस समान प्रश्न के लिए चर्चा देखें। जैसा कि मैंने वहां सुझाव दिया था, एक दृष्टिकोण (हालांकि मैं वास्तव में इसकी अनुशंसा नहीं कर सकता) एक वैश्विक getProperty समारोह को परिभाषित करना होगा:

function getProperty(o, prop) {
    if (o[prop] !== undefined) return o[prop];
    else return "my default";
}

var o = {
    foo: 1
};

getProperty(o, 'foo'); // 1
getProperty(o, 'bar'); // "my default"

लेकिन इससे गैर-मानक कोड का एक समूह बन जाएगा जो दूसरों के पढ़ने के लिए मुश्किल होगा, और उन क्षेत्रों में अनपेक्षित परिणाम हो सकते हैं जहां आप अपेक्षा करते हैं या एक अनिर्धारित मूल्य चाहते हैं। बस जाने के लिए बेहतर जांचें:

var someVar = o.someVar || "my default";

Answer #10

एक दृष्टिकोण एक डिफ़ॉल्ट वस्तु लेना होगा और इसे लक्षित वस्तु के साथ मर्ज करना होगा। लक्षित ऑब्जेक्ट डिफ़ॉल्ट ऑब्जेक्ट में मान ओवरराइड करेगा।

jQuery में .extend() विधि है जो यह करता है। jQuery की आवश्यकता नहीं है, हालांकि वेनिला जेएस कार्यान्वयन जैसे कि यहां पाए जा सकते हैं:

http://gomakethings.com/vanilla-javascript-version-of-jquery-extend/


Answer #11

मुझे आश्चर्य है कि किसी ने अभी तक टर्नरी ऑपरेटर का उल्लेख नहीं किया है।

var emptyObj = {a:'123', b:'234', c:0};
var defaultValue = 'defaultValue';
var attr = 'someNonExistAttribute';
emptyObj.hasOwnProperty(attr) ? emptyObj[attr] : defaultValue;//=> 'defaultValue'


attr = 'c'; // => 'c'
emptyObj.hasOwnProperty(attr) ? emptyObj[attr] : defaultValue; // => 0

इस तरह, भले ही 'सी' का मान 0 है, फिर भी यह सही मान प्राप्त करेगा।





javascript