2015-06-16 8 views
8
var obj = { type: 'data', x, y, data: []} 

स्पष्ट रूप से यह मेरा टाइपो था, {x,y} {x: x, y: y} होना चाहिए था। लेकिन यह वही करता है जो मैं चाहता हूं, क्रोम में, क्षेत्र x को स्थानीय चर का मान x मिलता है।क्यों obj = {x, y} क्रोम में काम करता है?

लेकिन यह क्यों काम करता है?

+0

संस्करण 43.0.2357.81 लिनक्समिंट 17.1 (64-बिट) पर चल रहे उबंटू 14.04 पर निर्मित – exebook

उत्तर

11

यह ईसीएमएस्क्रिप्ट 2015 (या ईसीएमएस्क्रिप्ट 6) का हिस्सा है। आप पहचानकर्ताओं को निर्दिष्ट करके, ऑब्जेक्ट अक्षरों में ऑब्जेक्ट्स में नई गुण बना सकते हैं।

MDN's Object Initializer's Property Definitions section का हवाला देते हुए,

ECMAScript 6 के साथ

, वहाँ एक छोटी उपलब्ध अंकन प्राप्त करने के लिए एक ही है:

var a = "foo", 
    b = 42, 
    c = {}; 

// Shorthand property names (ES6) 
var o = { a, b, c }; 

ECMAScript 6 विनिर्देश में इसी अनुभाग here है,

AssignmentProperty: IdentifierReferenceप्रारंभकर्ता ऑप्ट

  1. पीIdentifierReference की StringValue बनें।
  2. lref संकल्प बाध्यकारी (पी) हो।
  3. ReturnIfAbrupt (पी)।
  4. वी GetV हो चलो (मूल्य, पी)।
  5. ReturnIfAbrupt (v)।
  6. तो प्रारंभकर्ता ऑप्ट मौजूद है और वीअपरिभाषित, तो है
    1. DefaultValueप्रारंभकर्ता के मूल्यांकन का परिणाम हो करते हैं।
    2. v GetValue (डिफ़ॉल्ट वैल्यू) दें।
    3. ReturnIfAbrupt (v)।
    4. IsAnonymousFunctionDefinition (प्रारंभकर्ता) यदि सच, तो है
      1. hasNameProperty HasOwnProperty होने दो (वी, "नाम")।
      2. ReturnIfAbrupt (हैNameProperty)।
      3. तो hasNamePropertyझूठी है, SetFunctionName (वी, पी) प्रदर्शन करते हैं।
  7. वापसी PutValue ( lref, वी)।

असल में, विनिर्देश का कहना है कि, अगर आप सिर्फ एक पहचानकर्ता का उपयोग कर रहे, पहचानकर्ता के नाम के साथ एक नया संपत्ति बनाया जाएगा, और मूल्य उस पहचानकर्ता के वास्तविक मूल्य हो जाएगा। यह समारोह का नाम भी हो सकता है।

var a = "foo", b = 42, c = {}, d = function() {};  
console.log({a, b, c, d}); 
// { a: 'foo', b: 42, c: {}, d: [Function] } 
5

ES2015 ने ऑब्जेक्ट शाब्दिक नोटेशन बढ़ाया है। Chrome 43ish इस (आंशिक रूप से) का समर्थन करता है।

Babel में एक अच्छी व्याख्या है।

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