JavaScript FAQ
The Ecosystem
What's the difference between JavaScript and ECMAScript?
- ECMAScript is the standard (ECMA-262): https://github.com/tc39/ecma262
- JavaScript is a language that conforms to the ECMAScript Standard.
What are popular frameworks?
- Web Frameworks:
- widely used: React, Angular, Vue
- newer frameworks: Solid, Svelte
- higher level (built on top of the above): Next, SvelteKit, etc.
- Server side: Node, Express,
Check the latest: https://stateofjs.com/
What are transformers / bundlers?
Transformers and bundlers are used to use modern JavaScript language features that aren't yet universally supported across JavaScript runtimes.
- Transformers: parse and translate JavaScript. (e.g. Bable)
- Bundlers: turn multiple JavaScript source files into a bundle. (e.g. Webpack)
Latest developments:
- esbuild: written in Go.
- swc: writtern in Rust. Next.js migrated from babel to swc.
- tsc: TypeScript.
esbuild and swc are much faster than babel and tsc.
What's the difference between deno and node?
- Both are Javascript runtimes. Both use V8 under the hood.
- Deno was created to be an improved version of Node.js
- Deno is written in Rust.
- Deno supports TypeScript out of the box.
- Deno ships only a single executable file. No additional package manager needed.
The Language
How to include external JavaScript
Add this to HTML:
<script type="text/javascript," src="/code.js">
What are async and defer when loading JavaScript?
- no
async
ordefer
(default): The script is downloaded and executed immediately, blocking parsing until the script is completed. If the server is slow or the script is particularly heavy, then the web page is delayed. async
: The script is downloaded in parallel to parsing the page, and executed as soon as it is available (before parsing completes)defer
but notasync
: The script is downloaded in parallel to parsing the page, and executed after the page has finished parsing.- both
defer
andasync
: from the spec: "The defer attribute may be specified even if the async attribute is specified, to cause legacy Web browsers that only support defer (and not async) to fall back to the defer behavior instead of the synchronous blocking behavior that is the default."
Example:
<script defer type="text/javascript," src="/code.js"></script>
<script async type="text/javascript," src="/code.js"></script>
When to use which:
defer
is used for scripts that need the whole DOM and/or their relative execution order is important.async
is used for independent scripts, like counters or ads. And their relative execution order does not matter.
What's the difference between in
and hasOwnProperty()
?
in
: check prototype chain, all inherited properties will be included.hasOwnProperty()
: only check its own properties.
What's the difference between .call()
and .apply()
?
.call()
: the number of the arguments is known, they have to be mentioned as arguments in the call statement..apply()
: the number of the arguments is not known. It takes an array instead.
What's the difference between ==
and ===
?
==
checks only for equality in value, whereas ===
(strict equality operator) is a stricter equality test and returns false
if either the value or the type of the two variables are different.
What are primitive
There are 7 primitive data types: string
, number
, bigint
, boolean
, undefined
, symbol
(referred to as "atom" in other languages), and null
.
All primitives are immutable.
What are "falsey" values?
false
, undefined
, null
, 0
, ""
(empty string), NaN
.
However null != false
.
How to determine if variable is undefined
or null
?
- Undefined value: A value that is not defined and has no keyword is known as undefined value. For example in the declaration,
int number
; thenumber
hasundefined
value. - Null value: A value that is explicitly specified by the key word
null
is known as null value. For example in the declaration,str = null
; thestr
has a null value. The keywordnull
is used here.
Diff:
- Null value has a keyword called
null
; "undefined" is not a keyword. typeof
undefined variable or property returns'undefined'
whereastypeof
anull
value returns'object'
.
// undefined
> typeof a === 'undefined'
true
// null
> b = null
null
> typeof b
'object'
> null == undefined
true
> null === undefined
false
If you try to test the null values using the typeof operator it will not work as expected, because JavaScript return "object" for typeof null instead of "null".
The undefined is not a reserved keyword in JavaScript, and thus it is possible to declare a variable with the name undefined. So the correct way to test undefined variable or property is using the typeof operator, like this: if(typeof myVar === 'undefined').
What is Scope in JavaScript
Scope is the context in which a variable / function can be accessed.
Since ES6, const
and let
keywords allow developers to declare variables in the block scope, which means those variables exist only within the corresponding block
How can generic objects be created?
Generic objects can be created as:
var I = new object();
What is the function of the delete
operator?
The delete
keyword is used to delete the property as well as its value.
Example
> a = {b: 1, c:2}
{b: 1, c: 2}
> delete a.b
true
> a
{c: 2}
What's the result of 1 + 2 + '4'
Result: '34'
- first it calculates
1 + 2 = 3
- since
'4'
is a string, the number3
will be converted to a string and perform a concatenation.
What is the difference between an alert box and a confirmation box?
- An alert box displays only one button, which is the OK button.
- a Confirmation box displays two buttons, namely OK and cancel.
What does javascript:void(0);
Mean?
void(0)
is used to prevent the page from refreshing, and parameter “zero” is passed while calling.
void(0)
is used to call another method without refreshing the page.
How to add or remove elements to an array?
- add:
push()
: adds to the end of the array.unshift()
: add to the beginning of the array.
- remove:
pop()
: removes the last element.shift()
: removes the first element.
What is event bubbling?
When an event happens on an element, it first runs the handlers on it, then on its parent, then all the way up the DOM tree on other ancestors.
What are the different types of errors in JavaScript?
- Syntax errors / parsing errors: e.g. missing a closing parenthesis
- Runtime errors / exceptions: e.g. the syntax is correct but it trys to call a method that does not exist at runtime.
- Logical errors: no syntax and runtime error, but occur due to the bad logic.
What is the "strict mode"?
The strict mode is no longer required since the release of ES2015, which fixes most of JavaScript's confusing behavior with a more robust syntax.
Web API
What is Web API
The browser built-in APIs. (NOT the third-party APIs like YouTube API or Facebook API).
Examples: functions provided by document
, window
, navigator
objects.
What's the difference between BOM and DOM?
- BOM: Browser Object Model. JavaScript can use
window
object to interact with the browser.window
has many children, e.g.:document
(the DOM!)navigator
history
screen
location
: url, host, path, protocol
- DOM: Document Object Model. The
document
object inside thewindow
object. (i.e. it is part of BOM.)
What's the screen object?
screen
is used to read the information from the client's screen.
availHeight
: the height of the client's screenavailWidth
: the width of the client's screencolorDepth
: the bit depth of images.height
: the total height of the client's screen, including the taskbarwidth
: the total width of the client's screen, including the taskbar
What's the difference between screen.height and window.innerHeight
screen.width
/screen.height
: the actual size of your monitor, e.g. 1920 x 1080.screen.availWidth
/screen.availHeight
: the full monitor size minus topbar or sidebars of your OS. If topbar and sidebars are hidden, this should be the same as thescreen.width
/screen.height
.window.outerWidth
/window.outerHeight
: the size of the browser, includes the page and all the visible browser's bars (location, status, bookmarks, window title, borders, …). When the window is maximized, screen.availHeight
===window.outerHeight
window.innerWidth
/window.innerHeight
: the size of the viewport that shows the website, just the content, no browser's bars.document.body.clientWidth
/document.body.clientHeight
: the size of the document.
How to submit a form using JavaScript?
document.form[0].submit();
How to change the style of an element?
document.getElementById('foo').style.fontSize = '20';
How to change the class of an element?
document.getElementById('foo').className = 'bar';
How to print text on the screen?
document.write('Hello');
How to find client's OS / browser info?
navigator.appVersion;
How to get the status of a CheckBox
document.getElementById('checkbox1').checked;
How to remove the focus from the specified object?
document.getElementById('foo').blur();
How to change the content of an element?
document.getElementById('foo').innerHTML = 'content...';
What are the disadvantages of using innerHTML?
- The entire innerHTML content is re-parsed and builds into elements. You cannot append to it, the whole content will be replaced, so it is slower.
- no validation in innerHTML, so it is easier to insert rogue code in the document and make the web page unstable.
How to add event listeners?
document.getElementById(id).addEventListener('click', functionName);
// or
document.getElementById(id).onclick = function () {};
What's the difference between window.onload and onDocumentReady?
onload
: not run until all the information on the page is loaded. This leads to a substantial delay before any code is executed.onDocumentReady
: loads the code just after the DOM is loaded. This allows early manipulation of the code.
What are Cookies in JavaScript?
A cookie is a piece of data stored on your computer to be accessed by your browser. Cookies are saved as key/value pairs.
Add key / value pair to the cookie (this will not remove the existing pairs):
document.cookie = 'cookiename=cookievalue';
Get cookie:
document.cookie;
Delete cookie: set the value to empty and set the value of expires to a passed date.
document.cookie = 'cookiename=;expires=Wed, 21 Oct 2015 07:28:00 GMT';
How to escape / unescape strings?
Use escape
and unescape
under window
:
> escape("hello world")
'hello%20world'
> unescape('hello%20world')
'hello world'
How to Encode / Decode URI ?
Use encodeURI
and decodeURI
under window
:
> encodeURI('https://www.example.com/name="无名"')
'https://www.example.com/name=%22%E6%97%A0%E5%90%8D%22'
> decodeURI('https://www.example.com/name=%22%E6%97%A0%E5%90%8D%22')
'https://www.example.com/name="无名"'