Why applying Array.of() to Object creates Number in JavaScript/ECMAScript
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
offunction is an intentionally generic factory method; it does not require that itsthisvalue 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
add a comment |
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
offunction is an intentionally generic factory method; it does not require that itsthisvalue 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
add a comment |
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
offunction is an intentionally generic factory method; it does not require that itsthisvalue 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
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
offunction is an intentionally generic factory method; it does not require that itsthisvalue 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
javascript
edited Nov 19 '18 at 20:22
Ginpei
asked Nov 19 '18 at 19:43
GinpeiGinpei
17129
17129
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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).
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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).
add a comment |
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).
add a comment |
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).
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).
answered Nov 19 '18 at 19:57
Felix KlingFelix Kling
550k126857913
550k126857913
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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