Is there any case where the condition if(this) {}
fails? Because I couldn't think of a scenario where this
is undefined.
This is not an important question nor something anyone would normally use, I'm just asking out of pure curiosity.
Asked
Active
Viewed 70 times
5

Peter Krebs
- 3,831
- 2
- 15
- 29

avaragePHPenjoyer
- 53
- 1
- 3
-
`if (undefined)` is the same as `if (false)`. No error will result, if that's what you mean by "fail". – Pointy Feb 11 '22 at 15:43
-
4Note that this is something you could have tested in your browser console in less time than it took to type in the question. – Pointy Feb 11 '22 at 15:44
-
please edit your title. No one would ever search for this title in the future, defeating any potential benefit to the larger community. – The Fool Feb 11 '22 at 15:44
-
1`this` can be `undefined` in some cases. Like inside an arrow function, for example. – Louys Patrice Bessette Feb 11 '22 at 15:45
-
`(function () { "use strict"; return this === void 0; })()` – user3840170 Feb 11 '22 at 16:02
-
Since you seem curious about JavaScript, you may enjoy the video [WTFJS](https://www.youtube.com/watch?v=et8xNAc2ic8) and [these code examples](https://github.com/denysdovhan/wtfjs). – pyb Feb 11 '22 at 16:05
-
`this` can also be a primitive (other than `undefined`): `"use strict"; (function(){ if(this){ console.log("Truthy"); } else { console.log("Falsy"); } }).call(false);` logs `"Falsy"`. Even without strict mode, [falsy objects](//developer.mozilla.org/docs/Web/API/Document/all) are possible: `(function(){ if(this){ console.log("Truthy"); } else { console.log("Falsy"); } }).call(document.all);` logs `"Falsy"` in modern browsers. – Sebastian Simon Feb 25 '22 at 14:06
-
@pyb Meh, this talk has several mistakes and is quite outdated. I wouldn’t recommend it. – Sebastian Simon Feb 25 '22 at 14:10
1 Answers
2
Yes, in some execution contexts, this
is undefined
, which is falsy in JavaScript:
In strict mode, however, if the value of this is not set when entering an execution context, it remains as undefined, as shown in the following example:
Here is at least one convoluted scenario in which the following conditions must be met:
- global or function execution in strict mode
- the function was defined at the top-level (effectively being a function of
window
) - that function was called directly without invoking its parent (i.e.
foo()
and notwindow.foo()
) - the function returned
this
function foo() {
'use strict'; // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
return this;
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

pyb
- 4,813
- 2
- 27
- 45