22. How long is cool_secret accessible?
sessionStorage.setItem('cool_secret', 123);
sessionStorage.setItem('cool_secret', 123);
Anonymous Poll
23%
A: Forever, the data doesn't get lost.
42%
B: When the user closes the tab.
23%
C: When the user closes the entire browser, not only the tab.
12%
D: When the user shuts off their computer.
DevScrolls
22. How long is cool_secret accessible?
sessionStorage.setItem('cool_secret', 123);
sessionStorage.setItem('cool_secret', 123);
Answer: B
The data stored in sessionStorage is removed after closing the tab.
If you used localStorage, the data would've been there forever, unless for example localStorage.clear() is invoked.
The data stored in sessionStorage is removed after closing the tab.
If you used localStorage, the data would've been there forever, unless for example localStorage.clear() is invoked.
What's the output?
A: false true false true
B: false true true true
C: true true false true
D: true true true true
const obj = { 1: 'a', 2: 'b', 3: 'c' };
const set = new Set([1, 2, 3, 4, 5]); obj.hasOwnProperty('1'); obj.hasOwnProperty(1); set.has('1');
set.has(1);A: false true false true
B: false true true true
C: true true false true
D: true true true true
DevScrolls
What's the output? const obj = { 1: 'a', 2: 'b', 3: 'c' }; const set = new Set([1, 2, 3, 4, 5]); obj.hasOwnProperty('1'); obj.hasOwnProperty(1); set.has('1'); set.has(1); A: false true false true B: false true true true C: true true false true D: true true true true
Answer: C
All object keys (excluding Symbols) are strings under the hood, even if you don't type it yourself as a string. This is why obj.hasOwnProperty('1') also returns true.
It doesn't work that way for a set. There is no '1' in our set: set.has('1') returns false. It has the numeric type 1, set.has(1) returns true.
All object keys (excluding Symbols) are strings under the hood, even if you don't type it yourself as a string. This is why obj.hasOwnProperty('1') also returns true.
It doesn't work that way for a set. There is no '1' in our set: set.has('1') returns false. It has the numeric type 1, set.has(1) returns true.
25. What's the output?
const obj = { a: 'one', b: 'two', a: 'three' }; console.log(obj);
const obj = { a: 'one', b: 'two', a: 'three' }; console.log(obj);
Anonymous Poll
30%
A: { a: "one", b: "two" }
17%
B: { b: "two", a: "three" }
17%
C: { a: "three", b: "two" }
35%
D: SyntaxError
DevScrolls
25. What's the output?
const obj = { a: 'one', b: 'two', a: 'three' }; console.log(obj);
const obj = { a: 'one', b: 'two', a: 'three' }; console.log(obj);
Answer: C
If you have two keys with the same name, the key will be replaced. It will still be in its first position, but with the last specified value.
If you have two keys with the same name, the key will be replaced. It will still be in its first position, but with the last specified value.
26. The JavaScript global execution context creates two things for you: the global object, and the "this" keyword.
Anonymous Poll
55%
A: true
18%
B: false
27%
C: it depends
27. What's the output?
for (let i = 1; i < 5; i++) { if (i === 3) continue; console.log(i); }
for (let i = 1; i < 5; i++) { if (i === 3) continue; console.log(i); }
Anonymous Poll
16%
A: 1 2
42%
B: 1 2 3
39%
C: 1 2 4
3%
D: 1 3 4
28. What's the output?
A: "Just give Lydia pizza already!"
B: TypeError: not a function
C: SyntaxError
D: undefined
String.prototype.giveLydiaPizza = () => {
return 'Just give Lydia pizza already!'; };
const name = 'Lydia'; console.log(name.giveLydiaPizza())A: "Just give Lydia pizza already!"
B: TypeError: not a function
C: SyntaxError
D: undefined
DevScrolls
What's the output?
Answer: A
String is a built-in constructor, which we can add properties to. I just added a method to its prototype. Primitive strings are automatically converted into a string object, generated by the string prototype function. So, all strings (string objects) have access to that method!
String is a built-in constructor, which we can add properties to. I just added a method to its prototype. Primitive strings are automatically converted into a string object, generated by the string prototype function. So, all strings (string objects) have access to that method!
29. What's the output?
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; a[c] = 456; console.log(a[b]);
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; a[c] = 456; console.log(a[b]);
Anonymous Poll
33%
A: 123
22%
B: 456
26%
C: undefined
19%
D: ReferenceError
DevScrolls
29. What's the output?
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; a[c] = 456; console.log(a[b]);
const a = {}; const b = { key: 'b' }; const c = { key: 'c' }; a[b] = 123; a[c] = 456; console.log(a[b]);
Answer: B
Object keys are automatically converted into strings. We are trying to set an object as a key to object a, with the value of 123.
However, when we stringify an object, it becomes "[object Object]". So what we are saying here, is that a["[object Object]"] = 123. Then, we can try to do the same again. c is another object that we are implicitly stringifying. So then, a["[object Object]"] = 456.
Then, we log a[b], which is actually a["[object Object]"]. We just set that to 456, so it returns 456.
Object keys are automatically converted into strings. We are trying to set an object as a key to object a, with the value of 123.
However, when we stringify an object, it becomes "[object Object]". So what we are saying here, is that a["[object Object]"] = 123. Then, we can try to do the same again. c is another object that we are implicitly stringifying. So then, a["[object Object]"] = 456.
Then, we log a[b], which is actually a["[object Object]"]. We just set that to 456, so it returns 456.
30. What's the output?
A: First Second Third
B: First Third Second
C: Second First Third
D: Second Third First
const foo = () => console.log('First');
const bar = () => setTimeout(() => console.log('Second')); const baz = () => console.log('Third');
bar();
foo();
baz();A: First Second Third
B: First Third Second
C: Second First Third
D: Second Third First
Answer: B
We have a setTimeout function and invoked it first. Yet, it was logged last.
This is because in browsers, we don't just have the runtime engine, we also have something called a WebAPI. The WebAPI gives us the setTimeout function to start with, and for example the DOM.
After the callback is pushed to the WebAPI, the setTimeout function itself (but not the callback!) is popped off the stack.

Now, foo gets invoked, and "First" is being logged.

foo is popped off the stack, and baz gets invoked. "Third" gets logged.

The WebAPI can't just add stuff to the stack whenever it's ready. Instead, it pushes the callback function to something called the queue.

This is where an event loop starts to work. An event loop looks at the stack and task queue. If the stack is empty, it takes the first thing on the queue and pushes it onto the stack.

bar gets invoked, "Second" gets logged, and it's popped off the stack.
We have a setTimeout function and invoked it first. Yet, it was logged last.
This is because in browsers, we don't just have the runtime engine, we also have something called a WebAPI. The WebAPI gives us the setTimeout function to start with, and for example the DOM.
After the callback is pushed to the WebAPI, the setTimeout function itself (but not the callback!) is popped off the stack.

Now, foo gets invoked, and "First" is being logged.

foo is popped off the stack, and baz gets invoked. "Third" gets logged.

The WebAPI can't just add stuff to the stack whenever it's ready. Instead, it pushes the callback function to something called the queue.

This is where an event loop starts to work. An event loop looks at the stack and task queue. If the stack is empty, it takes the first thing on the queue and pushes it onto the stack.

bar gets invoked, "Second" gets logged, and it's popped off the stack.