Why applying Array.of() to Object creates Number in JavaScript/ECMAScript












2















I was reading ES spec and found that Array.of() uses this to create a new instance.



22.1.2.3 Array.of ( ...items )




Note 2: The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.




Then I tried to create using Object as this, as following. However, it creates Number instance while the others like Date, RegExp or my classes create own instances.



const arr = Array.of.apply(Object, ['Hey']);

console.log(arr instanceof Number); // => true
console.log(Object.prototype.toString.apply(arr)); // => '[object Number]'


Why is this arr not instance of Object but Number?



Spec: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.of










share|improve this question





























    2















    I was reading ES spec and found that Array.of() uses this to create a new instance.



    22.1.2.3 Array.of ( ...items )




    Note 2: The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.




    Then I tried to create using Object as this, as following. However, it creates Number instance while the others like Date, RegExp or my classes create own instances.



    const arr = Array.of.apply(Object, ['Hey']);

    console.log(arr instanceof Number); // => true
    console.log(Object.prototype.toString.apply(arr)); // => '[object Number]'


    Why is this arr not instance of Object but Number?



    Spec: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.of










    share|improve this question



























      2












      2








      2








      I was reading ES spec and found that Array.of() uses this to create a new instance.



      22.1.2.3 Array.of ( ...items )




      Note 2: The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.




      Then I tried to create using Object as this, as following. However, it creates Number instance while the others like Date, RegExp or my classes create own instances.



      const arr = Array.of.apply(Object, ['Hey']);

      console.log(arr instanceof Number); // => true
      console.log(Object.prototype.toString.apply(arr)); // => '[object Number]'


      Why is this arr not instance of Object but Number?



      Spec: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.of










      share|improve this question
















      I was reading ES spec and found that Array.of() uses this to create a new instance.



      22.1.2.3 Array.of ( ...items )




      Note 2: The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.




      Then I tried to create using Object as this, as following. However, it creates Number instance while the others like Date, RegExp or my classes create own instances.



      const arr = Array.of.apply(Object, ['Hey']);

      console.log(arr instanceof Number); // => true
      console.log(Object.prototype.toString.apply(arr)); // => '[object Number]'


      Why is this arr not instance of Object but Number?



      Spec: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.of







      javascript






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 '18 at 20:22







      Ginpei

















      asked Nov 19 '18 at 19:43









      GinpeiGinpei

      17129




      17129
























          1 Answer
          1






          active

          oldest

          votes


















          3














          From the spec:



          4. If IsConstructor(C) is true, then
          a. Let A be ? Construct(C, « len »).


          Given that C is Object and you are passing one argument to Array.of, this is the same as doing





          new Object(1)


          which returns a Number object (because that's how Object is defined).






          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%2f53381581%2fwhy-applying-array-of-to-object-creates-number-in-javascript-ecmascript%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            3














            From the spec:



            4. If IsConstructor(C) is true, then
            a. Let A be ? Construct(C, « len »).


            Given that C is Object and you are passing one argument to Array.of, this is the same as doing





            new Object(1)


            which returns a Number object (because that's how Object is defined).






            share|improve this answer




























              3














              From the spec:



              4. If IsConstructor(C) is true, then
              a. Let A be ? Construct(C, « len »).


              Given that C is Object and you are passing one argument to Array.of, this is the same as doing





              new Object(1)


              which returns a Number object (because that's how Object is defined).






              share|improve this answer


























                3












                3








                3







                From the spec:



                4. If IsConstructor(C) is true, then
                a. Let A be ? Construct(C, « len »).


                Given that C is Object and you are passing one argument to Array.of, this is the same as doing





                new Object(1)


                which returns a Number object (because that's how Object is defined).






                share|improve this answer













                From the spec:



                4. If IsConstructor(C) is true, then
                a. Let A be ? Construct(C, « len »).


                Given that C is Object and you are passing one argument to Array.of, this is the same as doing





                new Object(1)


                which returns a Number object (because that's how Object is defined).







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 19 '18 at 19:57









                Felix KlingFelix Kling

                550k126857913




                550k126857913






























                    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.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381581%2fwhy-applying-array-of-to-object-creates-number-in-javascript-ecmascript%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

                    How to send String Array data to Server using php in android

                    Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

                    Is anime1.com a legal site for watching anime?