Why does indexOf not break?
I made a typo in TypeScript which was picked up during code review.
I used someArray.indexOf[someObject] instead of someArray.indexOf(someObject);
I would expect an error from the IDE/Compiler. Instead, no errors were raised and the result was simply undefined.
Can anyone explain this?
javascript angular typescript
|
show 4 more comments
I made a typo in TypeScript which was picked up during code review.
I used someArray.indexOf[someObject] instead of someArray.indexOf(someObject);
I would expect an error from the IDE/Compiler. Instead, no errors were raised and the result was simply undefined.
Can anyone explain this?
javascript angular typescript
What did you assign the result of? Because what you wrote is valid you are taking thesomeObject
member of theindexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.
– vlaz
59 mins ago
1
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
2
@Jean-BaptisteYunès includingnull
...
– vlaz
58 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
1
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of typenumber
, the result of.indexOf[someObject]
shouldn't be considered anumber
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.
– vlaz
10 mins ago
|
show 4 more comments
I made a typo in TypeScript which was picked up during code review.
I used someArray.indexOf[someObject] instead of someArray.indexOf(someObject);
I would expect an error from the IDE/Compiler. Instead, no errors were raised and the result was simply undefined.
Can anyone explain this?
javascript angular typescript
I made a typo in TypeScript which was picked up during code review.
I used someArray.indexOf[someObject] instead of someArray.indexOf(someObject);
I would expect an error from the IDE/Compiler. Instead, no errors were raised and the result was simply undefined.
Can anyone explain this?
javascript angular typescript
javascript angular typescript
edited 53 mins ago
De Wet van As
asked 1 hour ago
De Wet van AsDe Wet van As
787
787
What did you assign the result of? Because what you wrote is valid you are taking thesomeObject
member of theindexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.
– vlaz
59 mins ago
1
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
2
@Jean-BaptisteYunès includingnull
...
– vlaz
58 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
1
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of typenumber
, the result of.indexOf[someObject]
shouldn't be considered anumber
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.
– vlaz
10 mins ago
|
show 4 more comments
What did you assign the result of? Because what you wrote is valid you are taking thesomeObject
member of theindexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.
– vlaz
59 mins ago
1
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
2
@Jean-BaptisteYunès includingnull
...
– vlaz
58 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
1
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of typenumber
, the result of.indexOf[someObject]
shouldn't be considered anumber
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.
– vlaz
10 mins ago
What did you assign the result of? Because what you wrote is valid you are taking the
someObject
member of the indexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.– vlaz
59 mins ago
What did you assign the result of? Because what you wrote is valid you are taking the
someObject
member of the indexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.– vlaz
59 mins ago
1
1
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
2
2
@Jean-BaptisteYunès including
null
...– vlaz
58 mins ago
@Jean-BaptisteYunès including
null
...– vlaz
58 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
1
1
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of type
number
, the result of .indexOf[someObject]
shouldn't be considered a number
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.– vlaz
10 mins ago
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of type
number
, the result of .indexOf[someObject]
shouldn't be considered a number
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.– vlaz
10 mins ago
|
show 4 more comments
4 Answers
4
active
oldest
votes
Quite easy.
someArray.indexOf
you know that this is a function
, which is also an object and can have properties.
By doing someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value of someObject
.
Of course, it is not defined on the indexOf
function, so it returns undefined
.
Quick example that illustrates the syntax and the fact that a function can have properties ;) :
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
3
I think answers here are missing theTypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you haveindex: number
andindex = arr.indexOf[obj]
then that should be a compilation error. Butindex: any
wouldn't throw a compilation error.
– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of theundefined
result but the main question remains...
– Florian
39 mins ago
add a comment |
Array.indexOf
is a function.
Functions are objects.
You were accessing the someObject
property of the Array.indexOf
function.
You would have got undefined
.
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
1
Array.indexOf
isundefined
,Array.prototype.indexOf
, on the other hand, is a function.
– Pavlo
5 mins ago
add a comment |
In short: Because that is the way the language is designed.
JavaScript evaluates an attempt to access a property that doesn't exist as undefined
.
It doesn't raise an exception.
add a comment |
Functions in JavaScript are first class objects.
When you access function Array.indexOf()
via bracket notation Array.indexOf['prop']
you actually trying to access a property which does not exist on indexOf
so you get undefined
.
1
What about TypeScript?
– vlaz
49 mins ago
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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%2f54254396%2fwhy-does-indexof-not-break%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Quite easy.
someArray.indexOf
you know that this is a function
, which is also an object and can have properties.
By doing someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value of someObject
.
Of course, it is not defined on the indexOf
function, so it returns undefined
.
Quick example that illustrates the syntax and the fact that a function can have properties ;) :
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
3
I think answers here are missing theTypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you haveindex: number
andindex = arr.indexOf[obj]
then that should be a compilation error. Butindex: any
wouldn't throw a compilation error.
– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of theundefined
result but the main question remains...
– Florian
39 mins ago
add a comment |
Quite easy.
someArray.indexOf
you know that this is a function
, which is also an object and can have properties.
By doing someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value of someObject
.
Of course, it is not defined on the indexOf
function, so it returns undefined
.
Quick example that illustrates the syntax and the fact that a function can have properties ;) :
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
3
I think answers here are missing theTypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you haveindex: number
andindex = arr.indexOf[obj]
then that should be a compilation error. Butindex: any
wouldn't throw a compilation error.
– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of theundefined
result but the main question remains...
– Florian
39 mins ago
add a comment |
Quite easy.
someArray.indexOf
you know that this is a function
, which is also an object and can have properties.
By doing someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value of someObject
.
Of course, it is not defined on the indexOf
function, so it returns undefined
.
Quick example that illustrates the syntax and the fact that a function can have properties ;) :
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
Quite easy.
someArray.indexOf
you know that this is a function
, which is also an object and can have properties.
By doing someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value of someObject
.
Of course, it is not defined on the indexOf
function, so it returns undefined
.
Quick example that illustrates the syntax and the fact that a function can have properties ;) :
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
const array = ;
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
answered 59 mins ago
sjahansjahan
3,2051827
3,2051827
3
I think answers here are missing theTypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you haveindex: number
andindex = arr.indexOf[obj]
then that should be a compilation error. Butindex: any
wouldn't throw a compilation error.
– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of theundefined
result but the main question remains...
– Florian
39 mins ago
add a comment |
3
I think answers here are missing theTypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you haveindex: number
andindex = arr.indexOf[obj]
then that should be a compilation error. Butindex: any
wouldn't throw a compilation error.
– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of theundefined
result but the main question remains...
– Florian
39 mins ago
3
3
I think answers here are missing the
TypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you have index: number
and index = arr.indexOf[obj]
then that should be a compilation error. But index: any
wouldn't throw a compilation error.– vlaz
55 mins ago
I think answers here are missing the
TypeScript
tag. It's entirely reasonable to expect a compilation error in TS. Then again, it depends if you have index: number
and index = arr.indexOf[obj]
then that should be a compilation error. But index: any
wouldn't throw a compilation error.– vlaz
55 mins ago
@vlaz +1. sjahan gives OP a quick explanation of the
undefined
result but the main question remains...– Florian
39 mins ago
@vlaz +1. sjahan gives OP a quick explanation of the
undefined
result but the main question remains...– Florian
39 mins ago
add a comment |
Array.indexOf
is a function.
Functions are objects.
You were accessing the someObject
property of the Array.indexOf
function.
You would have got undefined
.
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
1
Array.indexOf
isundefined
,Array.prototype.indexOf
, on the other hand, is a function.
– Pavlo
5 mins ago
add a comment |
Array.indexOf
is a function.
Functions are objects.
You were accessing the someObject
property of the Array.indexOf
function.
You would have got undefined
.
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
1
Array.indexOf
isundefined
,Array.prototype.indexOf
, on the other hand, is a function.
– Pavlo
5 mins ago
add a comment |
Array.indexOf
is a function.
Functions are objects.
You were accessing the someObject
property of the Array.indexOf
function.
You would have got undefined
.
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
Array.indexOf
is a function.
Functions are objects.
You were accessing the someObject
property of the Array.indexOf
function.
You would have got undefined
.
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
const array = [1, 2, 3]
const someObject = 'asdasd'
console.log(array.indexOf[someObject])
// undefined
answered 59 mins ago
0xc14m1z0xc14m1z
1,409512
1,409512
1
Array.indexOf
isundefined
,Array.prototype.indexOf
, on the other hand, is a function.
– Pavlo
5 mins ago
add a comment |
1
Array.indexOf
isundefined
,Array.prototype.indexOf
, on the other hand, is a function.
– Pavlo
5 mins ago
1
1
Array.indexOf
is undefined
, Array.prototype.indexOf
, on the other hand, is a function.– Pavlo
5 mins ago
Array.indexOf
is undefined
, Array.prototype.indexOf
, on the other hand, is a function.– Pavlo
5 mins ago
add a comment |
In short: Because that is the way the language is designed.
JavaScript evaluates an attempt to access a property that doesn't exist as undefined
.
It doesn't raise an exception.
add a comment |
In short: Because that is the way the language is designed.
JavaScript evaluates an attempt to access a property that doesn't exist as undefined
.
It doesn't raise an exception.
add a comment |
In short: Because that is the way the language is designed.
JavaScript evaluates an attempt to access a property that doesn't exist as undefined
.
It doesn't raise an exception.
In short: Because that is the way the language is designed.
JavaScript evaluates an attempt to access a property that doesn't exist as undefined
.
It doesn't raise an exception.
answered 59 mins ago
QuentinQuentin
642k718661036
642k718661036
add a comment |
add a comment |
Functions in JavaScript are first class objects.
When you access function Array.indexOf()
via bracket notation Array.indexOf['prop']
you actually trying to access a property which does not exist on indexOf
so you get undefined
.
1
What about TypeScript?
– vlaz
49 mins ago
add a comment |
Functions in JavaScript are first class objects.
When you access function Array.indexOf()
via bracket notation Array.indexOf['prop']
you actually trying to access a property which does not exist on indexOf
so you get undefined
.
1
What about TypeScript?
– vlaz
49 mins ago
add a comment |
Functions in JavaScript are first class objects.
When you access function Array.indexOf()
via bracket notation Array.indexOf['prop']
you actually trying to access a property which does not exist on indexOf
so you get undefined
.
Functions in JavaScript are first class objects.
When you access function Array.indexOf()
via bracket notation Array.indexOf['prop']
you actually trying to access a property which does not exist on indexOf
so you get undefined
.
answered 50 mins ago
GibboKGibboK
34.3k107317542
34.3k107317542
1
What about TypeScript?
– vlaz
49 mins ago
add a comment |
1
What about TypeScript?
– vlaz
49 mins ago
1
1
What about TypeScript?
– vlaz
49 mins ago
What about TypeScript?
– vlaz
49 mins ago
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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%2f54254396%2fwhy-does-indexof-not-break%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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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
What did you assign the result of? Because what you wrote is valid you are taking the
someObject
member of theindexOf
method. Well, trying to. The only error would come from TypeScript compilation and only if you try to assign the result to something that doesn't match the expected type.– vlaz
59 mins ago
1
Welcome to javascript, where everything is an object!
– Jean-Baptiste Yunès
59 mins ago
2
@Jean-BaptisteYunès including
null
...– vlaz
58 mins ago
@vlaz sarcasm ?
– Florian
44 mins ago
1
@DeWetvanAs I am actually curious about your problem - this seems like a genuine bug/problem with TypeScript see example here. It seems that if you are trying to assign to a variable of type
number
, the result of.indexOf[someObject]
shouldn't be considered anumber
and thus the compilation would fail. That's the whole idea of TypeScript is - to enforce the types. The answers here focus on JS but ignore this.– vlaz
10 mins ago