Square Brackets Javascript Object Key












53














Can anyone explain how the why/how the below method of assigning keys in javascript works?



a = "b"
c = {[a]: "d"}


return:



Object {b: "d"}









share|improve this question
























  • @Tushar: There is no call to Object here. That's completely unrelated.
    – Felix Kling
    Sep 11 '15 at 4:52










  • @FelixKling Array is treated as object, typeof
    – Tushar
    Sep 11 '15 at 4:53










  • @Tushar: arrays are objects, but there is no array here and, again, no call to Object.
    – Felix Kling
    Sep 11 '15 at 4:54










  • Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
    – Sean Vieira
    Sep 11 '15 at 5:04
















53














Can anyone explain how the why/how the below method of assigning keys in javascript works?



a = "b"
c = {[a]: "d"}


return:



Object {b: "d"}









share|improve this question
























  • @Tushar: There is no call to Object here. That's completely unrelated.
    – Felix Kling
    Sep 11 '15 at 4:52










  • @FelixKling Array is treated as object, typeof
    – Tushar
    Sep 11 '15 at 4:53










  • @Tushar: arrays are objects, but there is no array here and, again, no call to Object.
    – Felix Kling
    Sep 11 '15 at 4:54










  • Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
    – Sean Vieira
    Sep 11 '15 at 5:04














53












53








53


10





Can anyone explain how the why/how the below method of assigning keys in javascript works?



a = "b"
c = {[a]: "d"}


return:



Object {b: "d"}









share|improve this question















Can anyone explain how the why/how the below method of assigning keys in javascript works?



a = "b"
c = {[a]: "d"}


return:



Object {b: "d"}






javascript






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Sep 11 '15 at 4:47









Tushar

67.3k1192120




67.3k1192120










asked Sep 11 '15 at 4:40









lcharbon

5321510




5321510












  • @Tushar: There is no call to Object here. That's completely unrelated.
    – Felix Kling
    Sep 11 '15 at 4:52










  • @FelixKling Array is treated as object, typeof
    – Tushar
    Sep 11 '15 at 4:53










  • @Tushar: arrays are objects, but there is no array here and, again, no call to Object.
    – Felix Kling
    Sep 11 '15 at 4:54










  • Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
    – Sean Vieira
    Sep 11 '15 at 5:04


















  • @Tushar: There is no call to Object here. That's completely unrelated.
    – Felix Kling
    Sep 11 '15 at 4:52










  • @FelixKling Array is treated as object, typeof
    – Tushar
    Sep 11 '15 at 4:53










  • @Tushar: arrays are objects, but there is no array here and, again, no call to Object.
    – Felix Kling
    Sep 11 '15 at 4:54










  • Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
    – Sean Vieira
    Sep 11 '15 at 5:04
















@Tushar: There is no call to Object here. That's completely unrelated.
– Felix Kling
Sep 11 '15 at 4:52




@Tushar: There is no call to Object here. That's completely unrelated.
– Felix Kling
Sep 11 '15 at 4:52












@FelixKling Array is treated as object, typeof
– Tushar
Sep 11 '15 at 4:53




@FelixKling Array is treated as object, typeof
– Tushar
Sep 11 '15 at 4:53












@Tushar: arrays are objects, but there is no array here and, again, no call to Object.
– Felix Kling
Sep 11 '15 at 4:54




@Tushar: arrays are objects, but there is no array here and, again, no call to Object.
– Felix Kling
Sep 11 '15 at 4:54












Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
– Sean Vieira
Sep 11 '15 at 5:04




Yes, but while typeof == "object", Array.prototype.constructor != Object.prototype.constructor, nor is the behavior the same.
– Sean Vieira
Sep 11 '15 at 5:04












2 Answers
2






active

oldest

votes


















78














It's the new ES2015 (the EcmaScript spec formally known as ES6) computed property name syntax. It's a shorthand for the someObject[someKey] assignment that you know from ES3/5:



var a = "b"
var c = {[a]: "d"}


is syntactic sugar for:



var a = "b"
var c = {}
c[a] = "d"





share|improve this answer





















  • It's not only ES6
    – Tushar
    Sep 11 '15 at 4:47










  • @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
    – Sean Vieira
    Sep 11 '15 at 4:51



















4














Really the use of gives an excellent way to use actual value of variable as key/property while creating JavaScript objects.




I'm pretty much statisfied with the above answer and I appreciate it as it allowed me to write this with a little example.



I've executed the code line by line on Node REPL (Node shell).




> var key = "fullName";     // Assignment
undefined
>
> var obj = {key: "Rishikesh Agrawani"} // Here key's value will not be used
undefined
> obj // Inappropriate, which we don't want
{ key: 'Rishikesh Agrawani' }
>
> // Let's fix
undefined
> var obj2 = {[key]: "Rishikesh Agrawani"}
undefined
> obj2
{ fullName: 'Rishikesh Agrawani' }
>





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f32515598%2fsquare-brackets-javascript-object-key%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    78














    It's the new ES2015 (the EcmaScript spec formally known as ES6) computed property name syntax. It's a shorthand for the someObject[someKey] assignment that you know from ES3/5:



    var a = "b"
    var c = {[a]: "d"}


    is syntactic sugar for:



    var a = "b"
    var c = {}
    c[a] = "d"





    share|improve this answer





















    • It's not only ES6
      – Tushar
      Sep 11 '15 at 4:47










    • @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
      – Sean Vieira
      Sep 11 '15 at 4:51
















    78














    It's the new ES2015 (the EcmaScript spec formally known as ES6) computed property name syntax. It's a shorthand for the someObject[someKey] assignment that you know from ES3/5:



    var a = "b"
    var c = {[a]: "d"}


    is syntactic sugar for:



    var a = "b"
    var c = {}
    c[a] = "d"





    share|improve this answer





















    • It's not only ES6
      – Tushar
      Sep 11 '15 at 4:47










    • @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
      – Sean Vieira
      Sep 11 '15 at 4:51














    78












    78








    78






    It's the new ES2015 (the EcmaScript spec formally known as ES6) computed property name syntax. It's a shorthand for the someObject[someKey] assignment that you know from ES3/5:



    var a = "b"
    var c = {[a]: "d"}


    is syntactic sugar for:



    var a = "b"
    var c = {}
    c[a] = "d"





    share|improve this answer












    It's the new ES2015 (the EcmaScript spec formally known as ES6) computed property name syntax. It's a shorthand for the someObject[someKey] assignment that you know from ES3/5:



    var a = "b"
    var c = {[a]: "d"}


    is syntactic sugar for:



    var a = "b"
    var c = {}
    c[a] = "d"






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Sep 11 '15 at 4:46









    Sean Vieira

    112k23222227




    112k23222227












    • It's not only ES6
      – Tushar
      Sep 11 '15 at 4:47










    • @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
      – Sean Vieira
      Sep 11 '15 at 4:51


















    • It's not only ES6
      – Tushar
      Sep 11 '15 at 4:47










    • @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
      – Sean Vieira
      Sep 11 '15 at 4:51
















    It's not only ES6
    – Tushar
    Sep 11 '15 at 4:47




    It's not only ES6
    – Tushar
    Sep 11 '15 at 4:47












    @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
    – Sean Vieira
    Sep 11 '15 at 4:51




    @Tushar - where else does this work? It throws for me in a normal ES5 environment (Node 0.10).
    – Sean Vieira
    Sep 11 '15 at 4:51













    4














    Really the use of gives an excellent way to use actual value of variable as key/property while creating JavaScript objects.




    I'm pretty much statisfied with the above answer and I appreciate it as it allowed me to write this with a little example.



    I've executed the code line by line on Node REPL (Node shell).




    > var key = "fullName";     // Assignment
    undefined
    >
    > var obj = {key: "Rishikesh Agrawani"} // Here key's value will not be used
    undefined
    > obj // Inappropriate, which we don't want
    { key: 'Rishikesh Agrawani' }
    >
    > // Let's fix
    undefined
    > var obj2 = {[key]: "Rishikesh Agrawani"}
    undefined
    > obj2
    { fullName: 'Rishikesh Agrawani' }
    >





    share|improve this answer


























      4














      Really the use of gives an excellent way to use actual value of variable as key/property while creating JavaScript objects.




      I'm pretty much statisfied with the above answer and I appreciate it as it allowed me to write this with a little example.



      I've executed the code line by line on Node REPL (Node shell).




      > var key = "fullName";     // Assignment
      undefined
      >
      > var obj = {key: "Rishikesh Agrawani"} // Here key's value will not be used
      undefined
      > obj // Inappropriate, which we don't want
      { key: 'Rishikesh Agrawani' }
      >
      > // Let's fix
      undefined
      > var obj2 = {[key]: "Rishikesh Agrawani"}
      undefined
      > obj2
      { fullName: 'Rishikesh Agrawani' }
      >





      share|improve this answer
























        4












        4








        4






        Really the use of gives an excellent way to use actual value of variable as key/property while creating JavaScript objects.




        I'm pretty much statisfied with the above answer and I appreciate it as it allowed me to write this with a little example.



        I've executed the code line by line on Node REPL (Node shell).




        > var key = "fullName";     // Assignment
        undefined
        >
        > var obj = {key: "Rishikesh Agrawani"} // Here key's value will not be used
        undefined
        > obj // Inappropriate, which we don't want
        { key: 'Rishikesh Agrawani' }
        >
        > // Let's fix
        undefined
        > var obj2 = {[key]: "Rishikesh Agrawani"}
        undefined
        > obj2
        { fullName: 'Rishikesh Agrawani' }
        >





        share|improve this answer












        Really the use of gives an excellent way to use actual value of variable as key/property while creating JavaScript objects.




        I'm pretty much statisfied with the above answer and I appreciate it as it allowed me to write this with a little example.



        I've executed the code line by line on Node REPL (Node shell).




        > var key = "fullName";     // Assignment
        undefined
        >
        > var obj = {key: "Rishikesh Agrawani"} // Here key's value will not be used
        undefined
        > obj // Inappropriate, which we don't want
        { key: 'Rishikesh Agrawani' }
        >
        > // Let's fix
        undefined
        > var obj2 = {[key]: "Rishikesh Agrawani"}
        undefined
        > obj2
        { fullName: 'Rishikesh Agrawani' }
        >






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 2 at 17:08









        hygull

        3,14111228




        3,14111228






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f32515598%2fsquare-brackets-javascript-object-key%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            List item for chat from Array inside array React Native

            Thiostrepton

            Caerphilly