GitHmnnnnnlquestions - List of 1000 JavaScript Interview Questions
GitHmnnnnnlquestions - List of 1000 JavaScript Interview Questions
sudheerj / javascript-interview-questions
Star Notifications
master Go to file
View code
https://github.com/sudheerj/javascript-interview-questions 1/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
3. Take this Advanced JavaScript Course to learn advanced JS concepts and become a top
JS developer
Table of Contents
No. Questions
https://github.com/sudheerj/javascript-interview-questions 2/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
24 What is memoization
25 What is Hoisting
34 What is IndexedDB
37 What is a cookie
41 What are the differences between cookie, local storage and session storage
https://github.com/sudheerj/javascript-interview-questions 3/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
51 What is a promise
64 What is promise.all
75 What is eval
https://github.com/sudheerj/javascript-interview-questions 4/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
79 What is isNaN
92 What are the tools or techniques used for debugging JavaScript code
https://github.com/sudheerj/javascript-interview-questions 5/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
https://github.com/sudheerj/javascript-interview-questions 6/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
141 What is the way to find the number of parameters expected by a function
150 Can you write a random integers function to print integers with in a range
https://github.com/sudheerj/javascript-interview-questions 7/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
168 How do you get the image width and height using JS
175 What are the ways to execute javascript after page load
https://github.com/sudheerj/javascript-interview-questions 8/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
186 What happens if you do not use rest parameter as a last argument
190 How do you determine two values same or not using object
197 What are the differences between freeze and seal methods
200 What is the main difference between Object.values and Object.entries method
201 How can you get the list of keys of any object
https://github.com/sudheerj/javascript-interview-questions 9/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
215 What is the precedence order between local and global variables
222 What are the conventions to be followed for the usage of swtich case
228 What are the different error names from error object
233 How do you perform language specific date and time formatting
https://github.com/sudheerj/javascript-interview-questions 10/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
246 How do you find min and max values without Math functions
256 What happens if you write constructor more than once in a class
https://github.com/sudheerj/javascript-interview-questions 11/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
274 What are the DOM methods available for constraint validation
285 How do you check whether an array includes a particular value or not
292 How do you invoke javascript code in an iframe from parent page
https://github.com/sudheerj/javascript-interview-questions 12/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
295 What are the different methods to find HTML elements in DOM
https://github.com/sudheerj/javascript-interview-questions 13/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
326 What are the problems with postmessage target origin as wildcard
340 What are the list of cases error thrown from non-strict mode to strict mode
347 How do you return all matching strings against a regular expression
https://github.com/sudheerj/javascript-interview-questions 14/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
349 What is the output of below console statement with unary operator
363 How do you map the array values without using map method
372 How do you display data in a tabular format using console object
https://github.com/sudheerj/javascript-interview-questions 15/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
382 What are the different ways to deal with Asynchronous Code
https://github.com/sudheerj/javascript-interview-questions 16/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No. Questions
402 What is the difference between Function constructor and function declaration
414 What are the differences between arguments object and rest parameter
415 What are the differences between spread operator and rest parameter
418 What are the differences between for...of and for...in statements
i. Object constructor:
https://github.com/sudheerj/javascript-interview-questions 17/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The simplest way to create an empty object is using the Object constructor.
Currently this approach is not recommended.
The create method of Object creates a new object by passing the prototype object
as a parameter
The object literal syntax is equivalent to create method when it passes null as
parameter
Create any function and apply the new operator to create object instances,
function Person(name){
var object = {};
object.name=name;
object.age=21;
return object;
}
var object = new Person("Sudheer");
This is similar to function constructor but it uses prototype for their properties and
methods,
function Person(){}
Person.prototype.name = "Sudheer";
var object = new Person();
https://github.com/sudheerj/javascript-interview-questions 18/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
(OR)
// If the result is a non-null object then use it otherwise just use the new
console.log(result && typeof result === 'object' ? result : newInstance);
class Person {
constructor(name) {
this.name = name;
}
}
A Singleton is an object which can only be instantiated one time. Repeated calls to
its constructor return the same instance and this way one can ensure that they
don't accidentally create multiple instances.
⬆ Back to Top
Prototype chaining is used to build new types of objects based on existing ones. It is
similar to inheritance in a class based language.
https://github.com/sudheerj/javascript-interview-questions 19/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Call: The call() method invokes a function with a given this value and arguments
provided one by one
invite.call(employee1, 'Hello', 'How are you?'); // Hello John Rodson, How are yo
invite.call(employee2, 'Hello', 'How are you?'); // Hello Jimmy Baily, How are yo
Apply: Invokes the function with a given this value and allows you to pass in
arguments as an array
invite.apply(employee1, ['Hello', 'How are you?']); // Hello John Rodson, How are
invite.apply(employee2, ['Hello', 'How are you?']); // Hello Jimmy Baily, How are
bind: returns a new function, allowing you to pass any number of arguments
https://github.com/sudheerj/javascript-interview-questions 20/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log(greeting1 + ' ' + this.firstName + ' ' + this.lastName+ ', '+ gre
}
Call and apply are pretty interchangeable. Both execute the current function
immediately. You need to decide whether it’s easier to send in an array or a comma
separated list of arguments. You can remember by treating Call is for comma
(separated list) and Apply is for Array.
Whereas Bind creates a new function that will have this set to the first parameter
passed to bind().
⬆ Back to Top
JSON is a text-based data format following JavaScript object syntax, which was
popularized by Douglas Crockford . It is useful when you want to transmit data across a
network and it is basically just a text file with an extension of .json, and a MIME type of
application/json
JSON.parse(text)
JSON.stringify(object)
⬆ Back to Top
The slice() method returns the selected elements in an array as a new array object. It
selects the elements starting at the given start argument, and ends at the given
optional end argument without including the last element. If you omit the second
argument then it selects till the end.
https://github.com/sudheerj/javascript-interview-questions 21/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Note: Slice method won't mutate the original array but it returns the subset as a new
array.
⬆ Back to Top
The splice() method is used either adds/removes items to/from an array, and then
returns the removed item. The first argument specifies the array position for insertion
or deletion whereas the optional second argument indicates the number of elements to
be deleted. Each additional argument is added to the array.
Note: Splice method modifies the original array and returns the deleted array.
⬆ Back to Top
Slice Splice
Returns the subset of original array Returns the deleted elements as array
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 22/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Objects are similar to Maps in that both let you set keys to values, retrieve those values,
delete keys, and detect whether something is stored at a key. Due to this reason,
Objects have been used as Maps historically. But there are important differences that
make using a Map preferable in certain cases.
i. The keys of an Object are Strings and Symbols, whereas they can be any value for a
Map, including functions, objects, and any primitive.
ii. The keys in Map are ordered while keys added to Object are not. Thus, when
iterating over it, a Map object returns keys in order of insertion.
iii. You can get the size of a Map easily with the size property, while the number of
properties in an Object must be determined manually.
iv. A Map is an iterable and can thus be directly iterated, whereas iterating over an
Object requires obtaining its keys in some fashion and iterating over them.
v. An Object has a prototype, so there are default keys in the map that could collide
with your keys if you're not careful. As of ES5 this can be bypassed by using map =
Object.create(null), but this is seldom done.
vi. A Map may perform better in scenarios involving frequent addition and removal of
key pairs.
⬆ Back to Top
i. Two strings are strictly equal when they have the same sequence of characters,
same length, and same characters in corresponding positions.
ii. Two numbers are strictly equal when they are numerically equal. i.e, Having the
same number value. There are two special cases in this,
a. NaN is not equal to anything, including NaN.
b. Positive and negative zeros are equal to one another.
iii. Two Boolean operands are strictly equal if both are true or both are false.
iv. Two objects are strictly equal if they refer to the same Object.
v. Null and Undefined types are not equal with ===, but equal with ==. i.e,
null===undefined --> false but null==undefined --> true
https://github.com/sudheerj/javascript-interview-questions 23/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
0 == false // true
0 === false // false
1 == "1" // true
1 === "1" // false
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
[]==[] or []===[] //false, refer different objects in memory
{}=={} or {}==={} //false, refer different objects in memory
⬆ Back to Top
An arrow function is a shorter syntax for a function expression and does not have its
own this, arguments, super, or new.target. These functions are best suited for non-
method functions, and they cannot be used as constructors.
⬆ Back to Top
In Javascript, functions are first class objects. First-class functions means when functions
in that language are treated like any other variable.
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
Let's take an example of n-ary function and how it turns into a currying function,
Curried functions are great to improve code reusability and functional composition.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 25/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
A Pure function is a function where the return value is only determined by its
arguments without any side effects. i.e, If you call a function with the same arguments
'n' number of times and 'n' number of places in the application then it will always return
the same value.
Let's take an example to see the difference between pure and impure functions,
//Impure
let numberArray = [];
const impureAddNumber = number => numberArray.push(number);
//Pure
const pureAddNumber = number => argNumberArray =>
argNumberArray.concat([number]);
As per above code snippets, Push function is impure itself by altering the array and
returning an push number index which is independent of parameter value. Whereas
Concat on the other hand takes the array and concatenates it with the other array
producing a whole new array without side effects. Also, the return value is a
concatenation of the previous array.
Remember that Pure functions are important as they simplify unit testing without any
side effects and no need for dependency injection. They also avoid tight coupling and
make it harder to break your application by not having any side effects. These principles
are coming together with Immutability concept of ES6 by giving preference to const
over let usage.
⬆ Back to Top
The let statement declares a block scope local variable. Hence the variables defined
with let keyword are limited in scope to the block, statement, or expression on which it
is used. Whereas variables declared with the var keyword used to define a variable
globally, or locally to an entire function regardless of block scope.
https://github.com/sudheerj/javascript-interview-questions 26/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
}
console.log(counter); // 30 (because the variable in if block won't exist here)
⬆ Back to Top
var let
function userDetails(username) {
if(username) {
console.log(salary); // undefined due to hoisting
console.log(age); // ReferenceError: Cannot access 'age' before initializati
let age = 30;
var salary = 10000;
}
console.log(salary); //10000 (accessible to due function scope)
console.log(age); //error: age is not defined(due to block scope)
}
userDetails('John');
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 27/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
If you try to redeclare variables in a switch block then it will cause errors because
there is only one block. For example, the below code block throws a syntax error as
below,
let counter = 1;
switch(x) {
case 0:
let name;
break;
case 1:
let name; // SyntaxError for redeclaration.
break;
}
To avoid this error, you can create a nested block inside a case clause and create a new
block scoped lexical environment.
let counter = 1;
switch(x) {
case 0: {
let name;
break;
}
case 1: {
let name; // No SyntaxError for redeclaration.
break;
}
}
⬆ Back to Top
The Temporal Dead Zone is a behavior in JavaScript that occurs when declaring a
variable with the let and const keywords, but not with var. In ECMAScript 6, accessing a
let or const variable before its declaration (within its scope) causes a ReferenceError.
The time span when that happens, between the creation of a variable’s binding and its
declaration, is called the temporal dead zone.
function somemethod() {
console.log(counter1); // undefined
console.log(counter2); // ReferenceError
var counter1 = 1;
let counter2 = 2;
}
https://github.com/sudheerj/javascript-interview-questions 28/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
(function ()
{
// logic here
}
)
();
The primary reason to use an IIFE is to obtain data privacy because any variables
declared within the IIFE cannot be accessed by the outside world. i.e, If you try to access
variables with IIFE then it throws an error as below,
(function ()
{
var message = "IIFE";
console.log(message);
}
)
();
console.log(message); //Error: message is not defined
⬆ Back to Top
There are a lot of benefits to using modules in favour of a sprawling. Some of the
benefits are,
i. Maintainability
ii. Reusability
iii. Namespacing
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 29/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
var message;
console.log(message);
message = 'The variable Has been hoisted';
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 30/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
In ES6, Javascript classes are primarily syntactic sugar over JavaScript’s existing
prototype-based inheritance. For example, the prototype based inheritance written in
function expression as below,
function Bike(model,color) {
this.model = model;
this.color = color;
}
Bike.prototype.getDetails = function() {
return this.model + ' bike has' + this.color + ' color';
};
class Bike{
constructor(color, model) {
this.color= color;
this.model= model;
}
getDetails() {
return this.model + ' bike has' + this.color + ' color';
}
}
⬆ Back to Top
function Welcome(name){
var greetingInfo = function(message){
console.log(message+' '+name);
}
return greetingInfo;
https://github.com/sudheerj/javascript-interview-questions 31/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
}
var myFunction = Welcome('John');
myFunction('Welcome '); //Output: Welcome John
myFunction('Hello Mr.'); //output: Hello Mr.John
As per the above code, the inner function(i.e, greetingInfo) has access to the variables
in the outer function scope(i.e, Welcome) even after the outer function has returned.
⬆ Back to Top
Modules refer to small units of independent, reusable code and also act as the
foundation of many JavaScript design patterns. Most of the JavaScript modules export
an object literal, a function, or a constructor
⬆ Back to Top
i. Maintainability
ii. Reusability
iii. Namespacing
⬆ Back to Top
Scope is the accessibility of variables, functions, and objects in some particular part of
your code during runtime. In other words, scope determines the visibility of variables
and other resources in areas of your code.
⬆ Back to Top
A Service worker is basically a script (JavaScript file) that runs in the background,
separate from a web page and provides features that don't need a web page or user
interaction. Some of the major features of service workers are Rich offline
experiences(offline first web application development), periodic background syncs,
push notifications, intercept and handle network requests and programmatically
managing a cache of responses.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 32/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Service worker can't access the DOM directly. But it can communicate with the pages it
controls by responding to messages sent via the postMessage interface, and those
pages can manipulate the DOM.
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
Web storage is an API that provides a mechanism by which browsers can store
key/value pairs locally within the user's browser, in a much more intuitive fashion than
using cookies. The web storage provides two mechanisms for storing data on the client.
i. Local storage: It stores data for current origin with no expiration date.
ii. Session storage: It stores data for one session and the data is lost when the
browser tab is closed.
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 33/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
document.cookie = "username=John";
⬆ Back to Top
i. When a user visits a web page, the user profile can be stored in a cookie.
ii. Next time the user visits the page, the cookie remembers the user profile.
⬆ Back to Top
i. By default, the cookie is deleted when the browser is closed but you can change
this behavior by setting expiry date (in UTC time).
i. By default, the cookie belongs to a current page. But you can tell the browser what
path the cookie belongs to using a path parameter.
⬆ Back to Top
You can delete a cookie by setting the expiry date as a passed date. You don't need to
specify a cookie value in this case. For example, you can delete a username cookie in
the current page as below.
Note: You should define the cookie path option to ensure that you delete the right
cookie. Some browsers doesn't allow to delete a cookie unless you specify a path
parameter.
⬆ Back to Top
41. What are the differences between cookie, local storage and session
storage
Below are some of the differences between cookie, local storage and session storage,
Local Session
Feature Cookie
storage storage
Not Not
SSL support Supported
supported supported
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 35/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
localStorage.setItem('logo', document.getElementById('logo').value);
localStorage.getItem('logo');
⬆ Back to Top
The session storage provided methods for reading, writing and clearing the session
data
⬆ Back to Top
The StorageEvent is an event that fires when a storage area has been changed in the
context of another document. Whereas onstorage property is an EventHandler for
processing storage events. The syntax would be as below
window.onstorage = functionRef;
Let's take the example usage of onstorage event handler which logs the storage key
and it's values
window.onstorage = function(e) {
console.log('The ' + e.key +
' key has been changed from ' + e.oldValue +
https://github.com/sudheerj/javascript-interview-questions 36/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Web storage is more secure, and large amounts of data can be stored locally, without
affecting website performance. Also, the information is never transferred to the server.
Hence this is a more recommended approach than Cookies.
⬆ Back to Top
You need to check browser support for localStorage and sessionStorage before using
web storage,
⬆ Back to Top
You need to check browser support for web workers before using it
⬆ Back to Top
You need to follow below steps to start using web workers for counting example
i. Create a Web Worker File: You need to write a script to increment the count value.
Let's name it as counter.js
https://github.com/sudheerj/javascript-interview-questions 37/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
let i = 0;
function timedCount() {
i = i + 1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
Here postMessage() method is used to post a message back to the HTML page
i. Create a Web Worker Object: You can create a web worker object by checking for
browser support. Let's name this file as web_worker_example.js
if (typeof(w) == "undefined") {
w = new Worker("counter.js");
}
w.onmessage = function(event){
document.getElementById("message").innerHTML = event.data;
};
i. Terminate a Web Worker: Web workers will continue to listen for messages (even
after the external script is finished) until it is terminated. You can use the
terminate() method to terminate listening to the messages.
w.terminate();
i. Reuse the Web Worker: If you set the worker variable to undefined you can reuse
the code
w = undefined;
⬆ Back to Top
WebWorkers don't have access to below javascript objects since they are defined in an
external files
i. Window object
ii. Document object
iii. Parent object
https://github.com/sudheerj/javascript-interview-questions 38/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
A promise is an object that may produce a single value some time in the future with
either a resolved value or a reason that it’s not resolved(for example, network error). It
will be in one of the 3 possible states: fulfilled, rejected, or pending.
});
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 39/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
function callbackFunction(name) {
console.log('Hello ' + name);
}
function outerFunction(callback) {
let name = prompt('Please enter your name.');
callback(name);
}
outerFunction(callbackFunction);
⬆ Back to Top
The callbacks are needed because javascript is an event driven language. That means
instead of waiting for a response javascript will keep executing while listening for other
events. Let's take an example with the first function invoking an API call(simulated by
setTimeout) and the next function which logs the message.
function firstFunction(){
// Simulate a code delay
https://github.com/sudheerj/javascript-interview-questions 40/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
setTimeout( function(){
console.log('First function called');
}, 1000 );
}
function secondFunction(){
console.log('Second function called');
}
firstFunction();
secondFunction();
Output
// Second function called
// First function called
As observed from the output, javascript didn't wait for the response of the first function
and the remaining code block got executed. So callbacks are used in a way to make
sure that certain code doesn’t execute until the other code finishes execution.
⬆ Back to Top
Callback Hell is an anti-pattern with multiple nested callbacks which makes code hard
to read and debug when dealing with asynchronous logic. The callback hell looks like
below,
async1(function(){
async2(function(){
async3(function(){
async4(function(){
....
});
});
});
});
⬆ Back to Top
⬆ Back to Top
The EventSource object is used to receive server-sent event notifications. For example,
you can receive messages from server as below,
⬆ Back to Top
⬆ Back to Top
60. What are the events available for server sent events
Below are the list of events available for server sent events
Event Description
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 42/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
loadScript('/script1.js', function(script) {
console.log('first script is loaded');
loadScript('/script2.js', function(script) {
loadScript('/script3.js', function(script) {
})
});
⬆ Back to Top
The process of executing a sequence of asynchronous tasks one after another using
promises is known as Promise chaining. Let's take an example of promise chaining for
calculating the final result,
}).then(function(result) {
console.log(result); // 1
return result * 2;
}).then(function(result) {
console.log(result); // 2
return result * 3;
}).then(function(result) {
https://github.com/sudheerj/javascript-interview-questions 43/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log(result); // 6
return result * 4;
});
In the above handlers, the result is passed to the chain of .then() handlers with the
below work flow,
⬆ Back to Top
Promise.all is a promise that takes an array of promises as an input (an iterable), and it
gets resolved when all the promises get resolved or any one of them gets rejected. For
example, the syntax of promise.all method is below,
Note: Remember that the order of the promises(output the result) is maintained as per
input order.
⬆ Back to Top
Promise.race([promise1, promise2]).then(function(value) {
https://github.com/sudheerj/javascript-interview-questions 44/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Strict Mode is a new feature in ECMAScript 5 that allows you to place a program, or a
function, in a “strict” operating context. This way it prevents certain actions from being
taken and throws more exceptions. The literal expression "use strict"; instructs the
browser to use the javascript code in the Strict mode.
⬆ Back to Top
⬆ Back to Top
"use strict";
x = 3.14; // This will cause an error because x is not declared
function myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
⬆ Back to Top
The double exclamation or negation(!!) ensures the resulting type is a boolean. If it was
falsey (e.g. 0, null, undefined, etc.), it will be false, otherwise, true. For example, you can
test IE version using this expression as below,
If you don't use this expression then it returns the original value.
⬆ Back to Top
The delete keyword is used to delete the property as well as its value.
⬆ Back to Top
You can use the JavaScript typeof operator to find the type of a JavaScript variable. It
returns the type of a variable or an expression.
⬆ Back to Top
The undefined property indicates that a variable has not been assigned a value, or not
declared at all. The type of undefined value is undefined too.
https://github.com/sudheerj/javascript-interview-questions 46/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
user = undefined
⬆ Back to Top
The value null represents the intentional absence of any object value. It is one of
JavaScript's primitive values. The type of null value is object. You can empty the variable
by setting the value to null.
⬆ Back to Top
Null Undefined
The null value is a primitive value The undefined value is a primitive value
that represents the null, empty, or used when a variable has not been
non-existent reference. assigned a value.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 47/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log(eval('1 + 2')); // 3
⬆ Back to Top
Window Document
⬆ Back to Top
function goBack() {
window.history.back()
}
function goForward() {
window.history.forward()
}
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 48/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Let's take an input element to detect the CapsLock on/off behavior with an example,
<p id="feedback"></p>
<script>
function enterInput(e) {
var flag = e.getModifierState("CapsLock");
if(flag) {
document.getElementById("feedback").innerHTML = "CapsLock activated";
} else {
document.getElementById("feedback").innerHTML = "CapsLock not activated
}
}
</script>
⬆ Back to Top
isNaN('Hello') //true
isNaN('100') //false
⬆ Back to Top
undeclared undefined
https://github.com/sudheerj/javascript-interview-questions 49/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
undeclared undefined
If you try to read the value of an If you try to read the value of an
undeclared variable, then a runtime error undefined variable, an undefined
is encountered value is returned.
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
The NaN property is a global property that represents "Not-a-Number" value. i.e, It
indicates that a value is not a legal number. It is very rare to use NaN in a program but
it can be used as return value for few cases
Math.sqrt(-1)
parseInt("Hello")
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 50/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The isFinite() function is used to determine whether a number is a finite, legal number.
It returns false if the value is +infinity, -infinity, or NaN (Not-a-Number), otherwise it
returns true.
isFinite(Infinity); // false
isFinite(NaN); // false
isFinite(-Infinity); // false
isFinite(100); // true
⬆ Back to Top
⬆ Back to Top
Event bubbling is a type of event propagation where the event first triggers on the
innermost target element, and then successively triggers on the ancestors (parents) of
the target element in the same nesting hierarchy till it reaches the outermost DOM
element.
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 51/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You can submit a form using JavaScript use document.form[0].submit(). All the form
input's information is submitted using onsubmit event handler
function submit() {
document.form[0].submit();
}
⬆ Back to Top
console.log(navigator.platform);
⬆ Back to Top
⬆ Back to Top
91. What is the difference between native, host and user objects
Native objects are objects that are part of the JavaScript language defined by the
ECMAScript specification. For example, String, Math, RegExp, Object, Function etc core
objects defined in the ECMAScript spec. Host objects are objects provided by the
browser or runtime environment (Node). For example, window, XmlHttpRequest, DOM
nodes etc are considered as host objects. User objects are objects defined in the
javascript code. For example, User objects created for profile information.
⬆ Back to Top
92. What are the tools or techniques used for debugging JavaScript
code
You can use below tools or techniques for debugging javascript
https://github.com/sudheerj/javascript-interview-questions 52/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
i. Chrome Devtools
ii. debugger statement
iii. Good old console.log statement
⬆ Back to Top
93. What are the pros and cons of promises over callbacks
Below are the list of pros and cons of promises over callbacks,
Pros:
Cons:
⬆ Back to Top
Attributes are defined on the HTML markup whereas properties are defined on the
DOM. For example, the below HTML element has 2 attributes type and value,
And after you change the value of the text field to "Good evening", it becomes like
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 53/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The same-origin policy is a policy that prevents JavaScript from making requests across
domain boundaries. An origin is defined as a combination of URI scheme, hostname,
and port number. If you enable this policy then it prevents a malicious script on one
page from obtaining access to sensitive data on another web page using Document
Object Model(DOM).
⬆ Back to Top
Void(0) is used to prevent the page from refreshing. This will be helpful to eliminate the
unwanted side-effect, because it will return the undefined primitive value. It is
commonly used for HTML documents that use href="JavaScript:Void(0);" within an <a>
element. i.e, when you click a link, the browser loads a new page or refreshes the same
page. But this behavior will be prevented using this expression. For example, the below
link notify the message without reloading the page
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 54/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No, they are entirely two different programming languages and have nothing to do
with each other. But both of them are Object Oriented Programming languages and
like many other languages, they follow similar syntax for basic features(if, else, for,
switch, break, continue etc).
⬆ Back to Top
<!doctype html>
<html>
<head>
<script>
function greeting() {
alert('Hello! Good morning');
}
</script>
</head>
<body>
<button type="button" onclick="greeting()">Click me</button>
</body>
</html>
⬆ Back to Top
JavaScript was created by Brendan Eich in 1995 during his time at Netscape
Communications. Initially it was developed under the name Mocha , but later the
language was officially called LiveScript when it first shipped in beta releases of
Netscape.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 55/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The preventDefault() method cancels the event if it is cancelable, meaning that the
default action or behaviour that belongs to the event will not occur. For example,
prevent form submission when clicking on submit button and prevent opening the
page URL when clicking on hyperlink are some common use cases.
document.getElementById("link").addEventListener("click", function(event){
event.preventDefault();
});
⬆ Back to Top
<script>
function firstFunc(event) {
alert("DIV 1");
event.stopPropagation();
}
function secondFunc() {
alert("DIV 2");
}
</script>
⬆ Back to Top
The return false statement in event handlers performs the below steps,
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 56/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 57/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
For example, if you wanted to detect field changes in inside a specific form, you can use
event delegation technique,
}, false);
⬆ Back to Top
ECMAScript is the scripting language that forms the basis of JavaScript. ECMAScript
standardized by the ECMA International standards organization in the ECMA-262 and
ECMA-402 specifications. The first edition of ECMAScript was released in 1997.
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 58/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
When receiving the data from a web server, the data is always in a string format. But
you can convert this string value to a javascript object using parse() method.
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 59/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
For example, the below setTimeout method is used to display the message after 3
seconds. This timeout can be cleared by the clearTimeout() method.
<script>
var msg;
function greeting() {
alert('Good morning');
}
function start() {
msg =setTimeout(greeting, 3000);
function stop() {
clearTimeout(msg);
}
</script>
⬆ Back to Top
The clearInterval() function is used in javascript to clear the interval which has been set
by setInterval() function. i.e, The return value returned by setInterval() function is stored
in a variable and it’s passed into the clearInterval() function to clear the interval.
For example, the below setInterval method is used to display the message for every 3
seconds. This interval can be cleared by the clearInterval() method.
<script>
var msg;
function greeting() {
alert('Good morning');
}
function start() {
msg = setInterval(greeting, 3000);
function stop() {
clearInterval(msg);
}
</script>
https://github.com/sudheerj/javascript-interview-questions 60/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
function redirect() {
window.location.href = 'newPage.html';
}
⬆ Back to Top
There are 3 possible ways to check whether a string contains a substring or not,
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 61/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function validateEmail(email) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[
return re.test(String(email).toLowerCase());
}
⬆ Back to Top
The above regular expression accepts unicode characters.
You can use window.location.href expression to get the current url path and you can
use the same expression for updating the URL too. You can also use document.URL for
read-only purposes but this solution has issues in FF.
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 62/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
i. Using in operator: You can use the in operator whether a key exists in an object or
not
"key" in obj
and If you want to check if a key doesn't exist, remember to use parenthesis,
!("key" in obj)
obj.hasOwnProperty("key") // true
const user = {
name: 'John'
};
⬆ Back to Top
var object = {
"k1": "value1",
"k2": "value2",
"k3": "value3"
};
https://github.com/sudheerj/javascript-interview-questions 63/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
i. Using Object entries(ECMA 7+): You can use object entries length along with
constructor type.
i. Using Object keys(ECMA 5+): You can use object keys length along with
constructor type.
i. Using for-in with hasOwnProperty(Pre-ECMA 5): You can use a for-in loop along
with hasOwnProperty.
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop)) {
return false;
}
}
⬆ Back to Top
function sum() {
var total = 0;
https://github.com/sudheerj/javascript-interview-questions 64/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
sum(1, 2, 3) // returns 6
Note: You can't apply array methods on arguments object. But you can convert into a
regular array as below.
⬆ Back to Top
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
⬆ Back to Top
####Cons
i. Too verbose
ii. Imperative
iii. You might face one-by-off errors
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 65/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You can use new Date() to generate a new Date object containing the current date
and time. For example, let's display the current date in mm/dd/yyyy
⬆ Back to Top
You need to use date.getTime() method to compare date values instead of comparison
operators (==, !=, ===, and !== operators)
⬆ Back to Top
⬆ Back to Top
JavaScript provided a trim method on string types to trim any whitespaces present at
the beginning or ending of the string.
If your browser(<IE9) doesn't support this method then you can use below polyfill.
https://github.com/sudheerj/javascript-interview-questions 66/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
if (!String.prototype.trim) {
(function() {
// Make sure we trim BOM and NBSP
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
String.prototype.trim = function() {
return this.replace(rtrim, '');
};
})();
}
⬆ Back to Top
There are two possible solutions to add new properties to an object. Let's take a simple
object to explain these solutions.
var object = {
key1: value1,
key2: value2
};
i. Using dot notation: This solution is useful when you know the name of the
property
object.key3 = "value3";
i. Using square bracket notation: This solution is useful when the name of the
property is dynamically determined.
obj["key3"] = "value3";
⬆ Back to Top
At first, the value decremented by one and then tested to see if it is equal to zero or not
for determining the truthy/falsy value.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 67/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
var a = b || c;
As per the above expression, variable 'a 'will get the value of 'c' only if 'b' is falsy (if is
null, false, undefined, 0, empty string, or NaN), otherwise 'a' will get the value of 'b'.
⬆ Back to Top
You can define multiline string literals using the '' character followed by line terminator.
But if you have a space after the '' character, the code will look exactly the same, but it
will raise a SyntaxError.
⬆ Back to Top
An application shell (or app shell) architecture is one way to build a Progressive Web
App that reliably and instantly loads on your users' screens, similar to what you see in
native applications. It is useful for getting some initial HTML to the screen fast without a
network.
⬆ Back to Top
Yes, We can define properties for functions because functions are also objects.
fn = function(x) {
//Function code goes here
}
fn.name = "John";
fn.profile = function(y) {
https://github.com/sudheerj/javascript-interview-questions 68/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
The continue statement is used to "jump over" one iteration in the loop. i.e, It breaks
one iteration (in the loop), if a specified condition occurs, and continues with the next
iteration in the loop.
https://github.com/sudheerj/javascript-interview-questions 69/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
var i, j;
loop1:
for (i = 0; i < 3; i++) {
loop2:
for (j = 0; j < 3; j++) {
if (i === j) {
continue loop1;
}
console.log('i = ' + i + ', j = ' + j);
}
}
// Output is:
// "i = 1, j = 0"
// "i = 2, j = 0"
// "i = 2, j = 1"
⬆ Back to Top
It is recommended to keep all declarations at the top of each script or function. The
benefits of doing this are,
⬆ Back to Top
⬆ Back to Top
It is recommended to avoid creating new objects using new Object() . Instead you can
initialize values based on it's type to create the objects.
var v1 = {};
var v2 = "";
var v3 = 0;
var v4 = false;
var v5 = [];
var v6 = /()/;
var v7 = function(){};
⬆ Back to Top
"users":[
{"firstName":"John", "lastName":"Abrahm"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Shane", "lastName":"Warn"}
]
⬆ Back to Top
⬆ Back to Top
150. Can you write a random integers function to print integers with in a
range
Yes, you can create a proper random function to return a random number between min
and max (both included)
⬆ Back to Top
Tree shaking is a form of dead code elimination. It means that unused modules will not
be included in the bundle during the build process and for that it relies on the static
structure of ES2015 module syntax,( i.e. import and export). Initially this has been
popularized by the ES2015 module bundler rollup .
⬆ Back to Top
Tree Shaking can significantly reduce the code size in any application. i.e, The less code
we send over the wire the more performant the application will be. For example, if we
just want to create a “Hello World” Application using SPA frameworks then it will take
around a few MBs, but by tree shaking it can bring down the size to just a few hundred
KBs. Tree shaking is implemented in Rollup and Webpack bundlers.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 72/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No, it allows arbitrary code to be run which causes a security problem. As we know that
the eval() function is used to run text as code. In most of the cases, it should not be
necessary to use it.
⬆ Back to Top
A regular expression is a sequence of characters that forms a search pattern. You can
use this search pattern for searching data in a text. These can be used to perform all
types of text search and text replace operations. Let's see the syntax format now,
/pattern/modifiers;
For example, the regular expression or search pattern with case-insensitive username
would be,
/John/i
⬆ Back to Top
Regular Expressions has two string methods: search() and replace(). The search()
method uses an expression to search for a match, and returns the position of the
match.
The replace() method is used to return a modified string where the pattern is replaced.
⬆ Back to Top
Modifiers can be used to perform case-insensitive and global searches. Let's list down
some of the modifiers,
https://github.com/sudheerj/javascript-interview-questions 73/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Modifier Description
⬆ Back to Top
i. Brackets: These are used to find a range of characters. For example, below are
some use cases,
a. [abc]: Used to find any of the characters between the brackets(a,b,c)
b. [0-9]: Used to find any of the digits between the brackets
c. (a|b): Used to find any of the alternatives separated with |
ii. Metacharacters: These are characters with a special meaning For example, below
are some use cases,
a. \d: Used to find a digit
b. \s: Used to find a whitespace character
c. \b: Used to find a match at the beginning or ending of a word
iii. Quantifiers: These are useful to define quantities For example, below are some use
cases,
a. n+: Used to find matches for any string that contains at least one n
b. n*: Used to find matches for any string that contains zero or more occurrences
of n
c. n?: Used to find matches for any string that contains zero or one occurrences
of n
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 74/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
RegExp object is a regular expression object with predefined properties and methods.
Let's see the simple usage of RegExp object,
⬆ Back to Top
You can use the test() method of regular expression in order to search a string for a
pattern, and return true or false depending on the result.
⬆ Back to Top
The purpose of exec method is similar to test method but it executes a search for a
match in a specified string and returns a result array, or null instead of returning
true/false.
⬆ Back to Top
You can change inline style or classname of a HTML element using javascript
i. Using style property: You can modify inline style using style property
document.getElementById("title").style.fontSize = "30px";
document.getElementById("title").className = "custom-title";
https://github.com/sudheerj/javascript-interview-questions 75/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The output is going to be 33 . Since 1 and 2 are numeric values, the result of the first
two digits is going to be a numeric value 3 . The next digit is a string type value
because of that the addition of numeric value 3 and string type value 3 is just going
to be a concatenation value 33 .
⬆ Back to Top
function getProfile() {
// code goes here
debugger;
// code goes here
}
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 76/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You can use regex which returns a true or false value depending on whether or not the
user is browsing with a mobile.
window.mobilecheck = function() {
var mobileCheck = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer
return mobileCheck;
};
⬆ Back to Top
You can detect mobile browsers by simply running through a list of devices and
checking if the useragent matches anything. This is an alternative solution for RegExp
usage,
function detectmob() {
if( navigator.userAgent.match(/Android/i)
|| navigator.userAgent.match(/webOS/i)
|| navigator.userAgent.match(/iPhone/i)
|| navigator.userAgent.match(/iPad/i)
|| navigator.userAgent.match(/iPod/i)
|| navigator.userAgent.match(/BlackBerry/i)
|| navigator.userAgent.match(/Windows Phone/i)
){
return true;
}
else {
return false;
}
}
⬆ Back to Top
168. How do you get the image width and height using JS
You can programmatically get the image and check the dimensions(width and height)
using Javascript.
https://github.com/sudheerj/javascript-interview-questions 77/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';
⬆ Back to Top
function httpGet(theUrl)
{
var xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.open( "GET", theUrl, false ); // false for synchronous request
xmlHttpReq.send( null );
return xmlHttpReq.responseText;
}
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 78/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
function traceValue(someParam) {
return condition1 ? value1
: condition2 ? value2
: condition3 ? value3
: value4;
}
function traceValue(someParam) {
if (condition1) { return value1; }
else if (condition2) { return value2; }
else if (condition3) { return value3; }
https://github.com/sudheerj/javascript-interview-questions 79/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
175. What are the ways to execute javascript after page load
You can execute javascript after page load in many different ways,
i. window.onload:
i. document.onload:
i. body onload:
<body onload="script();">
⬆ Back to Top
⬆ Back to Top
// define a function
var fn = function () {
//...
} // semicolon missing at this line
https://github.com/sudheerj/javascript-interview-questions 80/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
var fn = function () {
//...
}(function () {
//...
})();
In this case, we are passing the second function as an argument to the first function
and then trying to call the result of the first function call as a function. Hence, the
second function will fail with a "... is not a function" error at runtime.
⬆ Back to Top
The freeze() method is used to freeze an object. Freezing an object does not allow
adding new properties to an object,prevents from removing and prevents changing the
enumerability, configurability, or writability of existing properties. i.e, It returns the
passed object and does not create a frozen copy.
const obj = {
prop: 100
};
Object.freeze(obj);
obj.prop = 200; // Throws an error in strict mode
console.log(obj.prop); //100
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 81/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
In the Object-oriented paradigm, an existing API contains certain elements that are not
intended to be extended, modified, or re-used outside of their current context. Hence it
works as the final keyword which is used in various languages.
⬆ Back to Top
You can use navigator object to detect a browser language preference as below,
console.log(language);
⬆ Back to Top
function toTitleCase(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
toTitleCase("good morning john"); // Good Morning John
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 82/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
<script type="javascript">
// JS related code goes here
</script>
<noscript>
<a href="next_page.html?noJS=true">JavaScript is disabled in the page. Please
</noscript>
⬆ Back to Top
⬆ Back to Top
For example, let's take a sum example to calculate on dynamic number of parameters,
function total(…args){
let sum = 0;
https://github.com/sudheerj/javascript-interview-questions 83/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
for(let i of args){
sum+=i;
}
return sum;
}
console.log(fun(1,2)); //3
console.log(fun(1,2,3)); //6
console.log(fun(1,2,3,4)); //13
console.log(fun(1,2,3,4,5)); //15
⬆ Back to Top
186. What happens if you do not use rest parameter as a last argument
The rest parameter should be the last argument, as its job is to collect all the remaining
arguments into an array. For example, if you define a function like below it doesn’t
make any sense and will throw an error.
function someFunc(a,…b,c){
//You code goes here
return;
}
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 84/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function calculateSum(x, y, z) {
return x + y + z;
}
console.log(calculateSum(...numbers)); // 6
⬆ Back to Top
i. If it is not extensible.
ii. If all of its properties are non-configurable.
iii. If all its data properties are non-writable. The usage is going to be as follows,
const object = {
property: 'Welcome JS world'
};
Object.freeze(object);
console.log(Object.isFrozen(object));
⬆ Back to Top
190. How do you determine two values same or not using object
The Object.is() method determines whether two values are the same value. For example,
the usage with different types of values would be,
i. both undefined
ii. both null
iii. both true or both false
iv. both strings of the same length with the same characters in the same order
v. both the same object (means both object have same reference)
https://github.com/sudheerj/javascript-interview-questions 85/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
vi. both numbers and both +0 both -0 both NaN both non-zero and both not NaN
and both have the same value.
⬆ Back to Top
⬆ Back to Top
You can use the Object.assign() method which is used to copy the values and properties
from one or more source objects to a target object. It returns the target object which
has properties and values copied from the target object. The syntax would be as below,
Object.assign(target, ...sources)
Let's take example with one source and one target object,
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
console.log(target); // { a: 1, b: 3, c: 4 }
console.log(returnedTarget); // { a: 1, b: 3, c: 4 }
As observed in the above code, there is a common property( b ) from source to target
so it's value has been overwritten.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 86/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The Proxy object is used to define custom behavior for fundamental operations such as
property lookup, assignment, enumeration, function invocation, etc. The syntax would
be as follows,
var handler = {
get: function(obj, prop) {
return prop in obj ?
obj[prop] :
100;
}
};
In the above code, it uses get handler which define the behavior of the proxy when an
operation is performed on it
⬆ Back to Top
The Object.seal() method is used to seal an object, by preventing new properties from
being added to it and marking all existing properties as non-configurable. But values of
present properties can still be changed as long as they are writable. Let's see the below
example to understand more about seal() method
const object = {
property: 'Welcome JS world'
};
Object.seal(object);
object.property = 'Welcome to object world';
console.log(Object.isSealed(object)); // true
https://github.com/sudheerj/javascript-interview-questions 87/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
197. What are the differences between freeze and seal methods
If an object is frozen using the Object.freeze() method then its properties become
immutable and no changes can be made in them whereas if an object is sealed using
the Object.seal() method then the changes can be made in the existing properties of
the object.
⬆ Back to Top
i. If it is not extensible.
ii. If all of its properties are non-configurable.
iii. If it is not removable (but not necessarily non-writable). Let's see it in the action
const object = {
property: 'Hello, Good morning'
};
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 88/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
const object = {
a: 'Good morning',
b: 100
};
⬆ Back to Top
const object = {
a: 'Good morning',
b: 100
};
⬆ Back to Top
201. How can you get the list of keys of any object
You can use the Object.keys() method which is used to return an array of a given
object's own property names, in the same order as we get with a normal loop. For
example, you can get the keys of a user object,
const user = {
name: 'John',
gender: 'male',
age: 40
};
https://github.com/sudheerj/javascript-interview-questions 89/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
const user = {
name: 'John',
printInfo: function () {
console.log(`My name is ${this.name}.`);
}
};
⬆ Back to Top
new WeakSet([iterable]);
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 90/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
i. Sets can store any value Whereas WeakSets can store only collections of objects
ii. WeakSet does not have size property unlike Set
iii. WeakSet does not have methods such as clear, keys, values, entries, forEach.
iv. WeakSet is not iterable.
⬆ Back to Top
i. add(value): A new object is appended with the given value to the weakset
ii. delete(value): Deletes the value from the WeakSet collection.
iii. has(value): It returns true if the value is present in the WeakSet Collection,
otherwise it returns false.
iv. length(): It returns the length of weakSetObject Let's see the functionality of all the
above methods in an example,
⬆ Back to Top
The WeakMap object is a collection of key/value pairs in which the keys are weakly
referenced. In this case, keys must be objects and the values can be arbitrary values.
The syntax is looking like as below,
new WeakMap([iterable])
https://github.com/sudheerj/javascript-interview-questions 91/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The main difference is that references to key objects in Map are strong while references
to key objects in WeakMap are weak. i.e, A key object in WeakMap can be garbage
collected if there is no other reference to it. Other differences are,
i. Maps can store any key type Whereas WeakMaps can store only collections of key
objects
ii. WeakMap does not have size property unlike Map
iii. WeakMap does not have methods such as clear, keys, values, entries, forEach.
iv. WeakMap is not iterable.
⬆ Back to Top
i. set(key, value): Sets the value for the key in the WeakMap object. Returns the
WeakMap object.
ii. delete(key): Removes any value associated to the key.
iii. has(key): Returns a Boolean asserting whether a value has been associated to the
key in the WeakMap object or not.
iv. get(key): Returns the value associated to the key, or undefined if there is none.
Let's see the functionality of all the above methods in an example,
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 92/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The uneval() is an inbuilt function which is used to create a string representation of the
source code of an Object. It is a top-level function and is not associated with any
object. Let's see the below example to know more about it's functionality,
var a = 1;
uneval(a); // returns a String containing 1
uneval(function user() {}); // returns "(function user(){})"
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
Note: In most browsers, it will block while the print dialog is open.
⬆ Back to Top
The uneval function returns the source of a given object; whereas the eval function
does the opposite, by evaluating that source code in a different memory area. Let's see
an example to clarify the difference,
⬆ Back to Top
function (optionalParameters) {
//do something
}
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 94/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
215. What is the precedence order between local and global variables
A local variable takes precedence over a global variable with the same name. Let's see
this behavior in an example.
⬆ Back to Top
var user = {
firstName: "John",
lastName : "Abraham",
language : "en",
get lang() {
return this.language;
}
set lang(lang) {
this.language = lang;
}
};
console.log(user.lang); // getter access lang as en
user.lang = 'fr';
console.log(user.lang); // setter used to set lang as fr
⬆ Back to Top
Object.defineProperty(newObject, 'newProperty', {
value: 100,
https://github.com/sudheerj/javascript-interview-questions 95/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
writable: false
});
console.log(newObject.newProperty); // 100
⬆ Back to Top
Both have similar results until unless you use classes. If you use get the property will
be defined on the prototype of the object whereas using Object.defineProperty() the
property will be defined on the instance it is applied to.
⬆ Back to Top
⬆ Back to Top
Yes, You can use the Object.defineProperty() method to add Getters and Setters. For
example, the below counter object uses increment, decrement, add and subtract
properties,
// Define getters
Object.defineProperty(obj, "increment", {
get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
get : function () {this.counter--;}
});
// Define setters
https://github.com/sudheerj/javascript-interview-questions 96/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Object.defineProperty(obj, "add", {
set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
set : function (value) {this.counter -= value;}
});
obj.add = 10;
obj.subtract = 5;
console.log(obj.increment); //6
console.log(obj.decrement); //5
⬆ Back to Top
switch (expression)
{
case value1:
statement1;
break;
case value2:
statement2;
break;
.
.
case valueN:
statementN;
break;
default:
statementDefault;
}
The above multi-way branch statement provides an easy way to dispatch execution to
different parts of code based on the value of the expression.
⬆ Back to Top
222. What are the conventions to be followed for the usage of switch
case
Below are the list of conventions should be taken care,
iii. The default statement is optional. If the expression passed to switch does not
match with any case value then the statement within default case will be executed.
iv. The break statement is used inside the switch to terminate a statement sequence.
v. The break statement is optional. But if it is omitted, the execution will continue on
into the next case.
⬆ Back to Top
A primitive data type is data that has a primitive value (which has no properties or
methods). There are 7 types of primitive data types.
i. string
ii. number
iii. boolean
iv. null
v. undefined
vi. bigint
vii. symbol
⬆ Back to Top
objectName.property
objectName["property"]
objectName[expression]
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 98/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
try {
greeting("Welcome");
}
catch(err) {
console.log(err.name + "<br>" + err.message);
}
⬆ Back to Top
A SyntaxError is thrown if you try to evaluate code with a syntax error. For example, the
below missing quote for the function parameter throws a syntax error
try {
eval("greeting('welcome)"); // Missing ' will produce an error
}
catch(err) {
console.log(err.name);
}
⬆ Back to Top
228. What are the different error names from error object
There are 6 different types of error names returned from error object,
https://github.com/sudheerj/javascript-interview-questions 99/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 100/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
233. How do you perform language specific date and time formatting
You can use the Intl.DateTimeFormat object which is a constructor for objects that
enable language-sensitive date and time formatting. Let's see this behavior with an
example,
⬆ Back to Top
An iterator is an object which defines a sequence and a return value upon its
termination. It implements the Iterator protocol with a next() method which returns
an object with two properties: value (the next value in the sequence) and done (which
is true if the last value in the sequence has been consumed).
⬆ Back to Top
Synchronous iteration was introduced in ES6 and it works with below set of
components,
Iterable: It is an object which can be iterated over via a method whose key is
Symbol.iterator. Iterator: It is an object returned by invoking [Symbol.iterator]() on
an iterable. This iterator object wraps each iterated element in an object and returns it
via next() method one by one. IteratorResult: It is an object returned by next()
method. The object contains two properties; the value property contains an iterated
element and the done property determines whether the element is the last element or
not.
https://github.com/sudheerj/javascript-interview-questions 101/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The Event Loop is a queue of callback functions. When an async function executes, the
callback function is pushed into the queue. The JavaScript engine doesn't start
processing the event loop until the async function has finished executing the code.
Note: It allows Node.js to perform non-blocking I/O operations even though JavaScript
is single-threaded.
⬆ Back to Top
Call Stack is a data structure for javascript interpreters to keep track of function calls in
the program. It has two major actions,
i. Whenever you call a function for its execution, you are pushing it to the stack.
ii. Whenever the execution is completed, the function is popped out of the stack.
function hungry() {
eatFruits();
}
function eatFruits() {
return "I'm eating fruits";
}
i. Add the hungry() function to the call stack list and execute the code.
ii. Add the eatFruits() function to the call stack list and execute the code.
iii. Delete the eatFruits() function from our call stack list.
iv. Delete the hungry() function from the call stack list since there are no items
anymore.
https://github.com/sudheerj/javascript-interview-questions 102/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
A decorator is an expression that evaluates to a function and that takes the target,
name, and decorator descriptor as arguments. Also, it optionally returns a decorator
descriptor to install on the target object. Let's define admin decorator for user class at
design time,
function admin(isAdmin) {
return function(target) {
target.isAdmin = isAdmin;
}
}
@admin(true)
class User() {
}
console.log(User.isAdmin); //true
@admin(false)
class User() {
}
console.log(User.isAdmin); //false
⬆ Back to Top
i. Collator: These are the objects that enable language-sensitive string comparison.
https://github.com/sudheerj/javascript-interview-questions 103/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
ii. DateTimeFormat: These are the objects that enable language-sensitive date and
time formatting.
iii. ListFormat: These are the objects that enable language-sensitive list formatting.
iv. NumberFormat: Objects that enable language-sensitive number formatting.
v. PluralRules: Objects that enable plural-sensitive formatting and language-specific
rules for plurals.
vi. RelativeTimeFormat: Objects that enable language-sensitive relative time
formatting.
⬆ Back to Top
var x = "100";
var y = + x;
console.log(typeof x, typeof y); // string, number
var a = "Hello";
var b = + a;
console.log(typeof a, typeof b, b); // string, number, NaN
⬆ Back to Top
The sort() method is used to sort the elements of an array in place and returns the
sorted array. The example usage would be as below,
⬆ Back to Top
The compareFunction is used to define the sort order. If omitted, the array elements are
converted to strings, then sorted according to each character's Unicode code point
value. Let's take an example to see the usage of compareFunction,
https://github.com/sudheerj/javascript-interview-questions 104/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
You can use the reverse() method to reverse the elements in an array. This method is
useful to sort an array in descending order. Let's see the usage of reverse() method in
an example,
⬆ Back to Top
console.log(findMin(marks));
console.log(findMax(marks));
⬆ Back to Top
246. How do you find min and max values without Math functions
You can write functions which loop through an array comparing each value with the
lowest value or highest value to find the min and max values. Let's create those
functions to find min and max values,
https://github.com/sudheerj/javascript-interview-questions 105/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function findMax(arr) {
var length = arr.length
var max = -Infinity;
while (len--) {
if (arr[length] > max) {
max = arr[length];
}
}
return max;
}
console.log(findMin(marks));
console.log(findMax(marks));
⬆ Back to Top
The empty statement is a semicolon (;) indicating that no statement will be executed,
even if JavaScript syntax requires one. Since there is no action with an empty statement
you might think that it's usage is quite less, but the empty statement is occasionally
useful when you want to create a loop that has an empty body. For example, you can
initialize an array with zero values as below,
// Initialize an array a
for(int i=0; i < a.length; a[i++] = 0) ;
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 106/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The comma operator is used to evaluate each of its operands from left to right and
returns the value of the last operand. This is totally different from comma usage within
arrays, objects, and function arguments and parameters. For example, the usage for
numeric expressions would be as below,
var x = 1;
x = (x++, x);
console.log(x); // 2
⬆ Back to Top
You can also use the comma operator in a return statement where it processes before
returning.
function myFunction() {
var a = 1;
return (a += 10, a); // 11
}
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 107/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log(greeting(user));
⬆ Back to Top
Typing
Supports static typing It has dynamic typing
support
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 108/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
i. TypeScript is able to find compile time errors at the development time only and it
makes sures less runtime errors. Whereas javascript is an interpreted language.
ii. TypeScript is strongly-typed or supports static typing which allows for checking
type correctness at compile time. This is not available in javascript.
iii. TypeScript compiler can compile the .ts files into ES3,ES4 and ES5 unlike ES6
features of javascript which may not be supported in some browsers.
⬆ Back to Top
console.log(initObject.a); // John
⬆ Back to Top
The constructor method is a special method for creating and initializing an object
created within a class. If you do not specify a constructor method, a default constructor
is used. The example usage of constructor would be as below,
class Employee {
constructor() {
this.name = "John";
}
}
console.log(employeeObject.name); // John
⬆ Back to Top
256. What happens if you write constructor more than once in a class
The "constructor" in a class is a special method and it should be defined only once in a
class. i.e, If you write a constructor method more than once in a class it will throw a
SyntaxError error.
https://github.com/sudheerj/javascript-interview-questions 109/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
class Employee {
constructor() {
this.name = "John";
}
constructor() { // Uncaught SyntaxError: A class may only have one construc
this.age = 30;
}
}
console.log(employeeObject.name);
⬆ Back to Top
You can use the super keyword to call the constructor of a parent class. Remember
that super() must be called before using 'this' reference. Otherwise it will cause a
reference error. Let's the usage of it,
get area() {
return this.width * this.height;
}
set area(value) {
this.area = value;
}
}
⬆ Back to Top
You can use the Object.getPrototypeOf(obj) method to return the prototype of the
specified object. i.e. The value of the internal prototype property. If there are no
inherited properties then null value is returned.
https://github.com/sudheerj/javascript-interview-questions 110/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
// ES5
Object.getPrototypeOf('James'); // TypeError: "James" is not an object
// ES2015
Object.getPrototypeOf('James'); // String.prototype
⬆ Back to Top
You can use the Object.setPrototypeOf() method that sets the prototype (i.e., the
internal Prototype property) of a specified object to another object or null. For
example, if you want to set prototype of a square object to rectangle object would be
as follows,
Object.setPrototypeOf(Square.prototype, Rectangle.prototype);
Object.setPrototypeOf({}, null);
⬆ Back to Top
Note: By default, all the objects are extendable. i.e, The new properties can be added or
modified.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 111/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
try {
Object.defineProperty(newObject, 'newProperty', { // Adding new property
value: 100
});
} catch (e) {
console.log(e); // TypeError: Cannot define property newProperty, object is not
}
⬆ Back to Top
i. Object.preventExtensions
ii. Object.seal
iii. Object.freeze
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 112/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Object.defineProperties(newObject, {
newProperty1: {
value: 'John',
writable: true
},
newProperty2: {}
});
⬆ Back to Top
The MEAN (MongoDB, Express, AngularJS, and Node.js) stack is the most popular
open-source JavaScript software tech stack available for building dynamic web apps
where you can write both the server-side and client-side halves of the web project
entirely in JavaScript.
⬆ Back to Top
function greeting() {
console.log('Hello, welcome to JS world');
}
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){wh
⬆ Back to Top
i. The Code size will be reduced. So data transfers between server and client will be
fast.
ii. It hides the business logic from outside world and protects the code from others
iii. Reverse engineering is highly difficult
https://github.com/sudheerj/javascript-interview-questions 113/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
Target
It will be converted to a
data Converted into an unreadable format
complex form
format
⬆ Back to Top
iv. javascript-minifier.com/
v. prettydiff.com
⬆ Back to Top
JavaScript can be used to perform HTML form validation. For example, if the form field
is empty, the function needs to notify, and return false, to prevent the form being
submitted. Lets' perform user login in an html form,
function validateForm() {
var x = document.forms["myForm"]["uname"].value;
if (x == "") {
alert("The username shouldn't be empty");
return false;
}
}
⬆ Back to Top
You can perform HTML form validation automatically without using javascript. The
validation enabled by applying the required attribute to prevent form submission
when the input is empty.
<form method="post">
<input type="text" name="uname" required>
<input type="submit" value="Submit">
</form>
Note: Automatic form validation does not work in Internet Explorer 9 or earlier.
⬆ Back to Top
274. What are the DOM methods available for constraint validation
https://github.com/sudheerj/javascript-interview-questions 115/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The below DOM methods are available for constraint validation on an invalid input,
function myFunction() {
var userName = document.getElementById("uname");
if (!userName.checkValidity()) {
document.getElementById("message").innerHTML = userName.validationMessage;
} else {
document.getElementById("message").innerHTML = "Entered a valid username";
}
}
⬆ Back to Top
Below are the list of some of the constraint validation DOM properties available,
⬆ Back to Top
The validity property of an input element provides a set of properties related to the
validity of data.
⬆ Back to Top
function myOverflowFunction() {
if (document.getElementById("age").validity.rangeOverflow) {
alert("The mentioned age is not allowed");
}
}
⬆ Back to Top
No, javascript does not natively support enums. But there are different kinds of
solutions to simulate them even though they may not provide exact equivalents. For
example, you can use freeze or seal on object,
⬆ Back to Top
An enum is a type restricting variables to one value from a predefined set of constants.
JavaScript has no enums but typescript provides built-in enum support.
enum Color {
RED, GREEN, BLUE
}
⬆ Back to Top
You can use the Object.getOwnPropertyNames() method which returns an array of all
properties found directly in a given object. Let's the usage of it in an example,
const newObject = {
a: 1,
b: 2,
c: 3
};
⬆ Back to Top
You can use the Object.getOwnPropertyDescriptors() method which returns all own
property descriptors of a given object. The example usage of this method is below,
const newObject = {
a: 1,
b: 2,
c: 3
};
const descriptorsObject = Object.getOwnPropertyDescriptors(newObject);
console.log(descriptorsObject.a.writable); //true
console.log(descriptorsObject.a.configurable); //true
console.log(descriptorsObject.a.enumerable); //true
console.log(descriptorsObject.a.value); // 1
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 118/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
get area() {
return this.width * this.height;
}
set area(value) {
this.area = value;
}
}
⬆ Back to Top
The window.location.url property will be helpful to modify the url but it reloads the
page. HTML5 introduced the history.pushState() and history.replaceState()
methods, which allow you to add and modify history entries, respectively. For example,
you can use pushState as below,
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 119/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
You can use length and every method of arrays to compare two scalar(compared
directly using ===) arrays. The combination of these expressions can give the expected
result,
If you would like to compare arrays irrespective of order then you should sort them
before,
⬆ Back to Top
The new URL() object accepts the url string and searchParams property of this object
can be used to access the get parameters. Remember that you may need to use polyfill
or window.location to access the URL in older browsers(including IE).
⬆ Back to Top
function convertToThousandFormat(x){
return x.toLocaleString(); // 12,345.679
}
console.log(convertToThousandFormat(12345.6789));
⬆ Back to Top
Both are totally unrelated programming languages and no relation between them. Java
is statically typed, compiled, runs on its own VM. Whereas Javascript is dynamically
typed, interpreted, and runs in a browser and nodejs environments. Let's see the major
differences in a tabular format,
Object oriented
Paradigm Prototype based programming
programming
⬆ Back to Top
function func1() {
console.log("This is a first definition");
}
https://github.com/sudheerj/javascript-interview-questions 121/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function func1() {
console.log("This is a second definition");
}
func1(); // This is a second definition
It always calls the second function definition. In this case, namespace will solve the
name collision problem.
⬆ Back to Top
Even though JavaScript lacks namespaces, we can use Objects , IIFE to create
namespaces.
i. Using Object Literal Notation: Let's wrap variables and functions inside an Object
literal which acts as a namespace. After that you can access them using object
notation
var namespaceOne = {
function func1() {
console.log("This is a first definition");
}
}
var namespaceTwo = {
function func1() {
console.log("This is a second definition");
}
}
namespaceOne.func1(); // This is a first definition
namespaceTwo.func1(); // This is a second definition
(function() {
function fun1(){
console.log("This is a first definition");
} fun1();
}());
(function() {
function fun1(){
console.log("This is a second definition");
} fun1();
}());
https://github.com/sudheerj/javascript-interview-questions 122/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
i. Using a block and a let/const declaration: In ECMAScript 6, you can simply use a
block and a let declaration to restrict the scope of a variable to a block.
{
let myFunction= function fun1(){
console.log("This is a first definition");
}
myFunction();
}
//myFunction(): ReferenceError: myFunction is not defined.
{
let myFunction= function fun1(){
console.log("This is a second definition");
}
myFunction();
}
//myFunction(): ReferenceError: myFunction is not defined.
⬆ Back to Top
292. How do you invoke javascript code in an iframe from parent page
document.getElementById('targetFrame').contentWindow.targetFunction();
window.frames[0].frameElement.contentWindow.targetFunction(); // Accessing iframe
⬆ Back to Top
You can use the getTimezoneOffset method of the date object. This method returns
the time zone difference, in minutes, from current locale (host system settings) to UTC
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 123/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You can create both link and script elements in the DOM and append them as child to
head tag. Let's create a function to add script and style resources as below,
⬆ Back to Top
295. What are the different methods to find HTML elements in DOM
If you want to access any element in an HTML page, you need to start with accessing
the document object. Later you can use any of the below methods to find the HTML
element,
⬆ Back to Top
Note: You can download it from jquery's official site or install it from CDNs, like google.
https://github.com/sudheerj/javascript-interview-questions 124/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
The void operator evaluates the given expression and then returns undefined(i.e,
without returning value). The syntax would be as below,
void (expression)
void expression
Note: This operator is often used to obtain the undefined primitive value, using
"void(0)".
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 125/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The cursor can be set to wait in JavaScript by using the property "cursor". Let's perform
this behavior on page load using the below function.
function myFunction() {
window.document.body.style.cursor = "wait";
}
<body onload="myFunction()">
⬆ Back to Top
You can create infinite loops using for and while loops without using any expressions.
The for loop construct or syntax is better approach in terms of ESLint and code
optimizer tools,
for (;;) {}
while(true) {
}
⬆ Back to Top
JavaScript's with statement was intended to provide a shorthand for writing recurring
accesses to objects. So it can help reduce file size by reducing the need to repeat a
lengthy object reference without performance penalty. Let's take an example where it is
used to avoid redundancy when accessing an object several times.
a.b.c.greeting = 'welcome';
a.b.c.age = 32;
with(a.b.c) {
greeting = "welcome";
age = 32;
}
https://github.com/sudheerj/javascript-interview-questions 126/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
But this with statement creates performance problems since one cannot predict
whether an argument will refer to a real variable or to a property inside the with
argument.
⬆ Back to Top
Whereas in the second loop, the variable i is declared as the let keyword it becomes a
block scoped variable and it holds a new value(0, 1 ,2 3) for each iteration. Hence, the
output of the first loop is 0 1 2 3 .
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 127/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
xi. Classes
xii. Modules
⬆ Back to Top
ES6 is the sixth edition of the javascript language and it was released in June 2015. It
was initially known as ECMAScript 6 (ES6) and later renamed to ECMAScript 2015.
Almost all the modern browsers support ES6 but for the old browsers there are many
transpilers, like Babel.js etc.
⬆ Back to Top
No, you cannot redeclare let and const variables. If you do, it throws below error
Explanation: The variable declaration with var keyword refers to a function scope and
the variable is treated as if it were declared at the top of the enclosing scope due to
hoisting feature. So all the multiple declarations contributing to the same hoisted
variable without any error. Let's take an example of re-declaring variables in the same
scope for both var and let/const variables.
myFunc();
alert(name);
https://github.com/sudheerj/javascript-interview-questions 128/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
//ES5
var calculateArea = function(height, width) {
height = height || 50;
width = width || 60;
//ES6
var calculateArea = function(height = 50, width = 60) {
return width * height;
}
console.log(calculateArea()); //300
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 129/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Template literals or template strings are string literals allowing embedded expressions.
These are enclosed by the back-tick (`) character instead of double or single quotes. In
E6, this feature enables using dynamic expressions as below,
var greeting = 'Welcome to JS World, Mr. ' + firstName + ' ' + lastName.`
Note: You can use multi-line strings and string interpolation features with template
literals.
⬆ Back to Top
In ES5, you would have to use newline escape characters('\n') and concatenation
symbols(+) in order to get multi-line strings.
Whereas in ES6, You don't need to mention any newline sequence character,
⬆ Back to Top
The nesting template is a feature supported within template literals syntax to allow
inner backticks inside a placeholder ${ } within the template. For example, the below
nesting template is used to display the icons based on user permissions whereas outer
template checks for platform type,
You can write the above use case without nesting template features as well. However,
the nesting template feature is more compact and readable.
https://github.com/sudheerj/javascript-interview-questions 130/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Tagged templates are the advanced form of templates in which tags allow you to parse
template literals with a function. The tag function accepts the first parameter as an
array of strings and remaining parameters as expressions. This function can also return
manipulated strings based on parameters. Let's see the usage of this tagged template
behavior of an IT professional skill set in an organization,
var expertiseStr;
if (experienceExp > 10){
expertiseStr = 'expert developer';
} else if(skillExp > 5 && skillExp <= 10) {
expertiseStr = 'senior developer';
} else {
expertiseStr = 'junior developer';
}
return ${str0}${userExp}${str1}${expertiseStr}${str2}${skillExp};
}
⬆ Back to Top
ES6 provides a raw strings feature using the String.raw() method which is used to get
the raw string form of template strings. This feature allows you to access the raw strings
as they were entered, without processing escape sequences. For example, the usage
would be as below,
If you don't use raw strings, the newline character sequence will be processed by
displaying the output in multiple lines
Also, the raw property is available on the first argument to the tag function
function tag(strings) {
console.log(strings.raw[0]);
}
⬆ Back to Top
console.log(one); // "JAN"
console.log(two); // "FEB"
console.log(three); // "MARCH"
and you can get user properties of an object using destructuring assignment,
console.log(name); // John
console.log(age); // 32
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 132/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
A variable can be assigned a default value when the value unpacked from the array or
object is undefined during destructuring assignment. It helps to avoid setting default
values separately for each assignment. Let's take an example for both arrays and object
use cases,
Arrays destructuring:
var x, y, z;
Objects destructuring:
console.log(x); // 10
console.log(y); // 4
console.log(z); // 6
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 133/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Object literals make it easy to quickly create objects with properties inside the curly
braces. For example, it provides shorter syntax for common object property definition
as below.
//ES6
var x = 10, y = 20
obj = { x, y }
console.log(obj); // {x: 10, y:20}
//ES5
var x = 10, y = 20
obj = { x : x, y : y}
console.log(obj); // {x: 10, y:20}
⬆ Back to Top
The dynamic imports using import() function syntax allows us to load modules on
demand by using promises or the async/await syntax. Currently this feature is in stage4
proposal. The main advantage of dynamic imports is reduction of our bundle's sizes,
the size/payload response of our requests and overall improvements in the user
experience. The syntax of dynamic imports would be as below,
⬆ Back to Top
Below are some of the use cases of using dynamic imports over static imports,
if (isLegacyBrowser()) {
import(···)
.then(···);
}
i. Compute the module specifier at runtime. For example, you can use it for
internationalization.
import(`messages_${getLocale()}.js`).then(···);
https://github.com/sudheerj/javascript-interview-questions 134/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
For example, you can create an array of 8-bit signed integers as below
⬆ Back to Top
i. Dynamic loading
ii. State isolation
iii. Global namespace isolation
iv. Compilation hooks
v. Nested virtualization
⬆ Back to Top
i. Comparison:
https://github.com/sudheerj/javascript-interview-questions 135/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
var list = [ "ä", "a", "z" ]; // In German, "ä" sorts with "a" Whereas in Swedis
var l10nDE = new Intl.Collator("de");
var l10nSV = new Intl.Collator("sv");
console.log(l10nDE.compare("ä", "z") === -1); // true
console.log(l10nSV.compare("ä", "z") === +1); // true
i. Sorting:
var list = [ "ä", "a", "z" ]; // In German, "ä" sorts with "a" Whereas in Swedis
var l10nDE = new Intl.Collator("de");
var l10nSV = new Intl.Collator("sv");
console.log(list.sort(l10nDE.compare)) // [ "a", "ä", "z" ]
console.log(list.sort(l10nSV.compare)) // [ "a", "z", "ä" ]
⬆ Back to Top
The for...of statement creates a loop iterating over iterable objects or elements such as
built-in String, Array, Array-like objects (like arguments or NodeList), TypedArray, Map,
Set, and user-defined iterables. The basic usage of for...of statement on arrays would be
as below,
⬆ Back to Top
[...'John Resig']
The output of the array is ['J', 'o', 'h', 'n', '', 'R', 'e', 's', 'i', 'g'] Explanation: The string is an
iterable type and the spread operator within an array maps every character of an
iterable to one element. Hence, each character of a string becomes an element within
an Array.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 136/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
326. What are the problems with postmessage target origin as wildcard
targetWindow.postMessage(message, '*');
⬆ Back to Top
Since the listener listens for any message, an attacker can trick the application by
sending a message from the attacker’s origin, which gives an impression that the
receiver received the message from the actual sender’s window. You can avoid this
issue by validating the origin of the message on the receiver's end using the
“message.origin” attribute. For examples, let's check the sender's origin
http://www.some-sender.com on receiver side www.some-receiver.com,
//Listener on http://www.some-receiver.com/
window.addEventListener("message", function(message){
if(/^http://www\.some-sender\.com$/.test(message.origin)){
console.log('You received the data from valid sender', message.data);
}
});
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 137/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You cannot avoid using postMessages completely(or 100%). Even though your
application doesn’t use postMessage considering the risks, a lot of third party scripts
use postMessage to communicate with the third party service. So your application
might be using postMessage without your knowledge.
⬆ Back to Top
The postMessages are synchronous in IE8 browser but they are asynchronous in IE9
and all other modern browsers (i.e, IE9+, Firefox, Chrome, Safari).Due to this
asynchronous behaviour, we use a callback mechanism when the postMessage is
returned.
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 138/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The double tilde operator(~~) is known as double NOT bitwise operator. This operator
is going to be a quicker substitute for Math.floor().
⬆ Back to Top
"ABC".charCodeAt(0) // returns 65
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 139/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log("Welcome to JS world"[0])
The output of the above expression is "W". Explanation: The bracket notation with
specific index on a string returns the character at a specific location. Hence, it returns
the character "W" of the string. Since this is not supported in IE7 and below versions,
you may need to use the .charAt() method to get the desired result.
⬆ Back to Top
The Error constructor creates an error object and the instances of error objects are
thrown when runtime errors occur. The Error object can also be used as a base object
for user-defined exceptions. The syntax of error object would be as below,
You can throw user defined exceptions or errors using Error object in try...catch block as
below,
try {
if(withdraw > balance)
throw new Error("Oops! You don't have enough balance");
} catch (e) {
console.log(e.name + ': ' + e.message);
}
⬆ Back to Top
try {
throw new EvalError('Eval function error', 'someFile.js', 100);
https://github.com/sudheerj/javascript-interview-questions 140/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
} catch (e) {
console.log(e.message, e.name, e.fileName); // "Eval function erro
⬆ Back to Top
340. What are the list of cases error thrown from non-strict mode to
strict mode
When you apply 'use strict'; syntax, some of the below cases will throw a SyntaxError
before executing the script
var n = 022;
Hence, the errors from above cases are helpful to avoid errors in
development/production environments.
⬆ Back to Top
No. All objects have prototypes except for the base object which is created by the user,
or an object that is created using the new keyword.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 141/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
}
myFunction("argument1", "argument2", "argument3")
⬆ Back to Top
⬆ Back to Top
The concat() method is used to join two or more arrays by returning a new array
containing all the elements. The syntax would be as below,
Let's take an example of array's concatenation with veggies and fruits arrays,
⬆ Back to Top
Shallow Copy: Shallow copy is a bitwise copy of an object. A new object is created that
has an exact copy of the values in the original object. If any of the fields of the object
are references to other objects, just the reference addresses are copied i.e., only the
memory address is copied.
https://github.com/sudheerj/javascript-interview-questions 142/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Example
var empDetails = {
name: "John", age: 25, expertise: "Software Developer"
}
to create a duplicate
empDetailsShallowCopy.name = "Johnson"
The above statement will also change the name of empDetails , since we have a shallow
copy. That means we're losing the original data as well.
Deep copy: A deep copy copies all fields, and makes copies of dynamically allocated
memory pointed to by the fields. A deep copy occurs when an object is copied along
with the objects to which it refers.
Example
var empDetails = {
name: "John", age: 25, expertise: "Software Developer"
}
Create a deep copy by using the properties from the original object into new variable
var empDetailsDeepCopy = {
name: empDetails.name,
age: empDetails.age,
expertise: empDetails.expertise
}
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 143/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The repeat() method is used to construct and return a new string which contains the
specified number of copies of the string on which it was called, concatenated together.
Remember that this method has been added to the ECMAScript 2015 specification.
Let's take an example of Hello string to repeat it 4 times,
'Hello'.repeat(4); // 'HelloHelloHelloHello'
347. How do you return all matching strings against a regular expression
The matchAll() method can be used to return an iterator of all results matching a
string against a regular expression. For example, the below example returns an array of
matching string results against a regular expression,
console.log(greetingList[0]); //Hello1
console.log(greetingList[1]); //Hello2
console.log(greetingList[2]); //Hello3
⬆ Back to Top
The trim method of string prototype is used to trim on both sides of a string. But if
you want to trim especially at the beginning or ending of the string then you can use
trimStart/trimLeft and trimEnd/trimRight methods. Let's see an example of these
methods on a greeting message,
⬆ Back to Top
349. What is the output of below console statement with unary operator
console.log(+ 'Hello');
The output of the above console log statement returns NaN. Because the element is
prefixed by the unary operator and the JavaScript interpreter will try to convert that
element into a number type. Since the conversion fails, the value of the statement
results in NaN value.
⬆ Back to Top
⬆ Back to Top
A thunk is just a function which delays the evaluation of the value. It doesn’t take any
arguments but gives the value whenever you invoke the thunk. i.e, It is used not to
execute now but it will be sometime in the future. Let's take a synchronous example,
thunk() // 5
⬆ Back to Top
function fetchData(fn){
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json => fn(json))
}
asyncThunk()
https://github.com/sudheerj/javascript-interview-questions 145/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The getData function won't be called immediately but it will be invoked only when the
data is available from API endpoint. The setTimeout function is also used to make our
code asynchronous. The best real time example is redux state management library
which uses the asynchronous thunks to delay the actions to dispatch.
⬆ Back to Top
const circle = {
radius: 20,
diameter() {
return this.radius * 2;
},
perimeter: () => 2 * Math.PI * this.radius
};
console.log(circle.diameter()); console.log(circle.perimeter());
Output:
The output is 40 and NaN. Remember that diameter is a regular function, whereas the
value of perimeter is an arrow function. The this keyword of a regular function(i.e,
diameter) refers to the surrounding scope which is a class(i.e, Shape object). Whereas
this keyword of perimeter function refers to the surrounding scope which is a window
object. Since there is no radius property on window objects it returns an undefined
value and the multiple of number value returns NaN value.
⬆ Back to Top
In the above expression, g and m are for global and multiline flags.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 146/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
A repaint occurs when changes are made which affect the visibility of an element, but
not its layout. Examples of this include outline, visibility, or background color. A reflow
involves changes that affect the layout of a portion of the page (or the whole page).
Resizing the browser window, changing the font, content changing (such as user typing
text), using JavaScript methods involving computed styles, adding or removing
elements from the DOM, and changing an element's classes are a few of the things that
can trigger reflow. Reflow of an element causes the subsequent reflow of all child and
ancestor elements as well as any elements following it in the DOM.
⬆ Back to Top
console.log(![]); // false
⬆ Back to Top
If you add two arrays together, it will convert them both to strings and concatenate
them. For example, the result of adding arrays would be as below,
⬆ Back to Top
console.log(+null); // 0
console.log(+undefined);// NaN
console.log(+false); // 0
console.log(+NaN); // NaN
console.log(+""); // 0
https://github.com/sudheerj/javascript-interview-questions 147/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The self string can be formed with the combination of []()!+ characters. You need to
remember the below conventions to achieve this pattern.
i. Since Arrays are truthful values, negating the arrays will produce false: ![] === false
ii. As per JavaScript coercion rules, the addition of arrays together will toString them:
[] + [] === ""
iii. Prepend an array with + operator will convert an array to false, the negation will
make it true and finally converting the result will produce value '1': +(!(+[])) === 1
s e l f
^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^
⬆ Back to Top
You can apply the filter method on the array by passing Boolean as a parameter. This
way it removes all falsy values(0, undefined, null, false and "") from the array.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 148/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You can get unique values of an array with the combination of Set and rest
expression/spread(...) syntax.
⬆ Back to Top
const obj = { x: 1 };
// Grabs obj.x as as { otherName }
const { x: otherName } = obj;
⬆ Back to Top
363. How do you map the array values without using map method
You can map the array values without using the map method by just using the from
method of Array. Let's map city names from Countries array,
const countries = [
{ name: 'India', capital: 'Delhi' },
{ name: 'US', capital: 'Washington' },
{ name: 'Russia', capital: 'Moscow' },
{ name: 'Singapore', capital: 'Singapore' },
{ name: 'China', capital: 'Beijing' },
{ name: 'France', capital: 'Paris' },
];
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 149/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
⬆ Back to Top
⬆ Back to Top
You can create an array with some data or an array with the same values using fill
method.
⬆ Back to Top
i. %o — It takes an object,
ii. %s — It takes a string,
https://github.com/sudheerj/javascript-interview-questions 150/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
console.log('%c The text has blue color, with large font and red background', 'co
⬆ Back to Top
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 151/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Yes, it is possible to get and debug HTML elements in the console just like inspecting
elements.
⬆ Back to Top
372. How do you display data in a tabular format using console object
The console.table() is used to display data in the console in a tabular format to
visualize complex arrays or objects.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 152/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
The combination of IsNaN and isFinite methods are used to confirm whether an
argument is a number or not.
function isNumber(n){
return !isNaN(parseFloat(n)) && isFinite(n);
}
⬆ Back to Top
You need to select the content(using .select() method) of the input element and execute
the copy command with execCommand (i.e, execCommand('copy')). You can also
execute other system commands like cut and paste.
document.querySelector("#copy-button").onclick = function() {
// Select the content
document.querySelector("#copy-input").select();
// Copy to the clipboard
document.execCommand('copy');
};
⬆ Back to Top
You can use new Date().getTime() to get the current timestamp. There is an alternative
shortcut to get the value.
console.log(+new Date());
console.log(Date.now());
⬆ Back to Top
const biDimensionalArr = [11, [22, 33], [44, 55], [66, 77], 88, 99];
const flattenArr = [].concat(...biDimensionalArr); // [11, 22, 33, 44, 55, 66, 77
But you can make it work with multi-dimensional arrays by recursive calls,
https://github.com/sudheerj/javascript-interview-questions 153/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function flattenMultiArray(arr) {
const flattened = [].concat(...arr);
return flattened.some(item => Array.isArray(item)) ? flattenMultiArray(flatte
}
const multiDimensionalArr = [11, [22, 33], [44, [55, 66, [77, [88]], 99]]];
const flatArr = flattenMultiArray(multiDimensionalArr); // [11, 22, 33, 44, 55, 6
⬆ Back to Top
You can use indexOf to compare input with multiple values instead of checking each
value as one condition.
// Verbose approach
if (input === 'first' || input === 1 || input === 'second' || input === 2) {
someFunction();
}
// Shortcut
if (['first', 1, 'second', 2].indexOf(input) !== -1) {
someFunction();
}
⬆ Back to Top
window.onbeforeunload = function() {
alert("You work will be lost");
};
⬆ Back to Top
The right click on the page can be disabled by returning false from the oncontextmenu
attribute on the body element.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 154/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Primitive Values like string,number and boolean don't have properties and methods but
they are temporarily converted or coerced to an object(Wrapper object) when you try
to perform actions on them. For example, if you apply toUpperCase() method on a
primitive string value, it does not throw an error but returns uppercase of the string.
i.e, Every primitive except null and undefined have Wrapper Objects and the list of
wrapper objects are String,Number,Boolean,Symbol and BigInt.
⬆ Back to Top
AJAX stands for Asynchronous JavaScript and XML and it is a group of related
technologies(HTML, CSS, JavaScript, XMLHttpRequest API etc) used to display data
asynchronously. i.e. We can send data to the server and get data from the server
without reloading the web page.
⬆ Back to Top
382. What are the different ways to deal with Asynchronous Code
Below are the list of different ways to deal with Asynchronous code.
i. Callbacks
ii. Promises
iii. Async/await
iv. Third-party libraries such as async.js,bluebird etc
⬆ Back to Top
Until a few days back, One shortcoming of native promises is no direct way to cancel a
fetch request. But the new AbortController from js specification allows you to use a
signal to abort one or multiple fetch calls. The basic flow of cancelling a fetch request
would be as below,
https://github.com/sudheerj/javascript-interview-questions 155/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
ii. Get the signal property of an instance and pass the signal as a fetch option for
signal
iii. Call the AbortController's abort property to cancel all fetches that use that signal
For example, let's pass the same signal to multiple fetch calls will cancel all
requests with that signal,
⬆ Back to Top
Web speech API is used to enable modern browsers recognize and synthesize
speech(i.e, voice data into web apps). This API has been introduced by W3C Community
in the year 2012. It has two main parts,
https://github.com/sudheerj/javascript-interview-questions 156/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
In this API, browser is going to ask you for permission to use your microphone
if('speechSynthesis' in window){
var speech = new SpeechSynthesisUtterance('Hello World!');
speech.lang = 'en-US';
window.speechSynthesis.speak(speech);
}
The above examples can be tested on chrome(33+) browser's developer console. Note:
This API is still a working draft and only available in Chrome and Firefox
browsers(ofcourse Chrome only implemented the specification) ⬆ Back to Top
Both browser and NodeJS javascript environments throttles with a minimum delay that
is greater than 0ms. That means even though setting a delay of 0ms will not happen
instantaneously. Browsers: They have a minimum delay of 4ms. This throttle occurs
when successive calls are triggered due to callback nesting(certain depth) or after a
certain number of successive intervals. Note: The older browsers have a minimum delay
of 10ms. Nodejs: They have a minimum delay of 1ms. This throttle happens when the
delay is larger than 2147483647 or less than 1. The best example to explain this timeout
throttling behavior is the order of below code snippet.
function runMeFirst() {
console.log('My script is initialized');
}
setTimeout(runMeFirst, 0);
console.log('Script loaded');
Script loaded
My script is initialized
function runMeFirst() {
console.log('My script is initialized');
}
runMeFirst();
console.log('Script loaded');
https://github.com/sudheerj/javascript-interview-questions 157/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
My script is initialized
Script loaded
⬆ Back to Top
You can't use setTimeout(fn, 0) to execute the code immediately due to minimum delay
of greater than 0ms. But you can use window.postMessage() to achieve this behavior.
⬆ Back to Top
⬆ Back to Top
Microtask is the javascript code which needs to be executed immediately after the
currently executing task/microtask is completed. They are kind of blocking in nature. i.e,
The main thread will be blocked until the microtask queue is empty. The main sources
of microtasks are Promise.resolve, Promise.reject, MutationObservers,
IntersectionObservers etc
Note: All of these microtasks are processed in the same turn of the event loop. ⬆
Back to Top
⬆ Back to Top
⬆ Back to Top
In the runtime, typescript will provide the type to the customLibrary variable as any
type. The another alternative without using declare keyword is below
⬆ Back to Top
Promises Observables
Eager in nature; they are going to Lazy in nature; they require subscription to
be called immediately be invoked
⬆ Back to Top
Heap(Or memory heap) is the memory location where objects are stored when we
define variables. i.e, This is the place where all the memory allocations and de-
allocation take place. Both heap and call-stack are two containers of JS runtime.
Whenever runtime comes across variables and function declarations in the code it
stores them in the Heap.
⬆ Back to Top
Event Table is a data structure that stores and keeps track of all the events which will be
executed asynchronously like after some time interval or after the resolution of some
API requests. i.e Whenever you call a setTimeout function or invoke async operation, it
is added to the Event Table. It doesn't not execute functions on it’s own. The main
purpose of the event table is to keep track of events and send them to the Event Queue
as shown in the below diagram.
https://github.com/sudheerj/javascript-interview-questions 160/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Microtask Queue is the new queue where all the tasks initiated by promise objects get
processed before the callback queue. The microtasks queue are processed before the
next rendering and painting jobs. But if these microtasks are running for a long time
then it leads to visual degradation.
⬆ Back to Top
⬆ Back to Top
In JavaScript, primitive types include boolean, string, number, BigInt, null, Symbol and
undefined. Whereas non-primitive types include the Objects. But you can easily identify
them with the below function,
function isPrimitive(val) {
return Object(val) !== val;
}
isPrimitive(myPrimitive);
isPrimitive(myNonPrimitive);
If the value is a primitive data type, the Object constructor creates a new wrapper
object for the value. But If the value is a non-primitive data type (an object), the Object
constructor will give the same object.
⬆ Back to Top
i. Transform syntax
ii. Polyfill features that are missing in your target environment (using @babel/polyfill)
iii. Source code transformations (or codemods)
⬆ Back to Top
Node is a single thread, but some of the functions included in the Node.js standard
library(e.g, fs module functions) are not single threaded. i.e, Their logic runs outside of
the Node.js single thread to improve the speed and performance of a program.
⬆ Back to Top
Some of the most common use cases of observables are web sockets with push
notifications, user input changes, repeating intervals, etc
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 162/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Function Constructor:
var a = 100;
function createFunction() {
var a = 200;
return new Function('return a;');
}
console.log(createFunction()()); // 100
Function declaration:
var a = 100;
function createFunction() {
var a = 200;
return function func() {
return a;
}
}
console.log(createFunction()()); // 200
⬆ Back to Top
Short circuit conditions are meant for condensed way of writing simple if statements.
Let's demonstrate the scenario using an example. If you would like to login to a portal
with an authentication condition, the expression would be as below,
if (authenticate) {
loginToPorta();
}
Since the javascript logical operators evaluated from left to right, the above expression
can be simplified using && logical operator
https://github.com/sudheerj/javascript-interview-questions 163/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
The length property of an array is useful to resize or empty an array quickly. Let's apply
length property on number array to resize the number of elements from 5 to 2,
array.length = 2;
console.log(array.length); // 2
console.log(array); // [1,2]
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 164/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Note: Observables are not part of the JavaScript language yet but they are being
proposed to be added to the language
⬆ Back to Top
Classes:
class User {}
Constructor Function:
function User() {
}
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 165/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
An async function is a function declared with the async keyword which enables
asynchronous, promise-based behavior to be written in a cleaner style by avoiding
promise chains. These functions can contain zero or more await expressions.
⬆ Back to Top
While using asynchronous code, JavaScript’s ES6 promises can make your life a lot
easier without having callback pyramids and error handling on every second line. But
Promises have some pitfalls and the biggest one is swallowing errors by default.
Let's say you expect to print an error to the console for all the below cases,
Promise.resolve('promised value').then(function() {
throw new Error('error');
});
Promise.reject('error value').catch(function() {
throw new Error('error');
});
But there are many modern JavaScript environments that won't print any errors. You
can fix this problem in different ways,
i. Add catch block at the end of each chain: You can add catch block to the end of
each of your promise chains
Promise.resolve('promised value').then(function() {
throw new Error('error');
}).catch(function(error) {
https://github.com/sudheerj/javascript-interview-questions 166/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.error(error.stack);
});
But it is quite difficult to type for each promise chain and verbose too.
ii. Add done method: You can replace first solution's then and catch blocks with
done method
Promise.resolve('promised value').done(function() {
throw new Error('error');
});
Let's say you want to fetch data using HTTP and later perform processing on the
resulting data asynchronously. You can write done block as below,
getDataFromHttp()
.then(function(result) {
return processDataAsync(result);
})
.done(function(processed) {
displayData(processed);
});
In future, if the processing library API changed to synchronous then you can
remove done block as below,
getDataFromHttp()
.then(function(result) {
return displayData(processDataAsync(result));
})
and then you forgot to add done block to then block leads to silent errors.
iii. Extend ES6 Promises by Bluebird: Bluebird extends the ES6 Promises API to avoid
the issue in the second solution. This library has a “default” onRejection handler
which will print all errors from rejected Promises to stderr. After installation, you
can process unhandled rejections
Promise.onPossiblyUnhandledRejection(function(error){
throw error;
});
⬆ Back to Top
Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8
JavaScript engine and the Rust programming language.
⬆ Back to Top
By default, plain objects are not iterable. But you can make the object iterable by
defining a Symbol.iterator property on it.
const collection = {
one: 1,
two: 2,
three: 3,
[Symbol.iterator]() {
const values = Object.keys(this);
let i = 0;
return {
next: () => {
return {
value: this[values[i++]],
done: i > values.length
}
}
};
}
};
const collection = {
one: 1,
two: 2,
three: 3,
[Symbol.iterator]: function * () {
https://github.com/sudheerj/javascript-interview-questions 168/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
First, we should know about tail call before talking about "Proper Tail Call". A tail call is
a subroutine or function call performed as the final action of a calling function. Whereas
Proper tail call(PTC) is a technique where the program or code will not create
additional stack frames for a recursion when the function call is a tail call.
For example, the below classic or head recursion of factorial function relies on stack for
each step. Each step need to be processed upto n * factorial(n - 1)
function factorial(n) {
if (n === 0) {
return 1
}
return n * factorial(n - 1)
}
console.log(factorial(5)); //120
But if you use Tail recursion functions, they keep passing all the necessary data it needs
down the recursion without relying on the stack.
The above pattern returns the same output as the first one. But the accumulator keeps
track of total as an argument without using stack memory on recursive calls.
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 169/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
function isPromise(object){
if(Promise && Promise.resolve){
return Promise.resolve(object) == object;
}else{
throw "Promise not supported in your environment"
}
}
var i = 1;
var promise = new Promise(function(resolve,reject){
resolve()
});
console.log(isPromise(i)); // false
console.log(isPromise(p)); // true
function isPromise(value) {
return Boolean(value && typeof value.then === 'function');
}
var i = 1;
var promise = new Promise(function(resolve,reject){
resolve()
});
console.log(isPromise(i)) // false
console.log(isPromise(promise)); // true
⬆ Back to Top
You can use new.target pseudo-property to detect whether a function was called as a
constructor(using the new operator) or as a regular function call.
function Myfunc() {
if (new.target) {
console.log('called with new');
} else {
https://github.com/sudheerj/javascript-interview-questions 170/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
414. What are the differences between arguments object and rest
parameter
There are three main differences between arguments object and rest parameters
i. The arguments object is an array-like but not an array. Whereas the rest
parameters are array instances.
ii. The arguments object does not support methods such as sort, map, forEach, or
pop. Whereas these methods can be used in rest parameters.
iii. The rest parameters are only the ones that haven’t been given a separate name,
while the arguments object contains all arguments passed to the function
⬆ Back to Top
415. What are the differences between spread operator and rest
parameter
Rest parameter collects all remaining elements into an array. Whereas Spread operator
allows iterables( arrays / objects / strings ) to be expanded into single
arguments/elements. i.e, Rest parameter is opposite to the spread operator.
⬆ Back to Top
function* myGenFunc() {
yield 1;
yield 2;
yield 3;
}
const genObj = myGenFunc();
https://github.com/sudheerj/javascript-interview-questions 171/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
const myObj = {
* myGeneratorMethod() {
yield 1;
yield 2;
yield 3;
}
};
const genObj = myObj.myGeneratorMethod();
class MyClass {
* myGeneratorMethod() {
yield 1;
yield 2;
yield 3;
}
}
const myObject = new MyClass();
const genObj = myObject.myGeneratorMethod();
const SomeObj = {
*[Symbol.iterator] () {
yield 1;
yield 2;
yield 3;
}
}
console.log(Array.from(SomeObj)); // [ 1, 2, 3 ]
⬆ Back to Top
⬆ Back to Top
418. What are the differences between for...of and for...in statements
Both for...in and for...of statements iterate over js data structures. The only difference is
over what they iterate:
arr.newProp = 'newVlue';
Since for..in loop iterates over the keys of the object, the first loop logs 0, 1, 2 and
newProp while iterating over the array object. The for..of loop iterates over the values of
a arr data structure and logs a, b, c in the console.
⬆ Back to Top
The Instance properties must be defined inside of class methods. For example, name
and age properties defined insider constructor as below,
https://github.com/sudheerj/javascript-interview-questions 173/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
But Static(class) and prototype data properties must be defined outside of the
ClassBody declaration. Let's assign the age value for Person class as below,
Person.staticAge = 30;
Person.prototype.prototypeAge = 40;
⬆ Back to Top
isNaN(‘hello’); // true
Number.isNaN('hello'); // false
⬆ Back to Top
(function(dt) {
console.log(dt.toLocaleTimeString());
})(new Date());
Since both IIFE and void operator discard the result of an expression, you can avoid the
extra brackets using void operator for IIFE as below,
void function(dt) {
console.log(dt.toLocaleTimeString());
}(new Date());
https://github.com/sudheerj/javascript-interview-questions 174/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
You might have seen expressions used in switch condition but it is also possible to use
for switch cases by assigning true value for the switch condition. Let's see the weather
condition based on temparature as an example,
The easiest and safest way to ignore promise errors is void that error. This approach is
ESLint friendly too.
⬆ Back to Top
It is also possible to add more styles for the content. For example, the font-size can be
modified for the above text
https://github.com/sudheerj/javascript-interview-questions 175/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Coding Exercise
1: Undefined
2: ReferenceError
3: null
4: {model: "Honda", color: "white", year: "2010", country: "UK"}
Answer
⬆ Back to Top
function foo() {
let x = y = 0;
x++;
y++;
return x;
}
Answer
https://github.com/sudheerj/javascript-interview-questions 176/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
function main(){
console.log('A');
setTimeout(
function print(){ console.log('B'); }
,0);
console.log('C');
}
main();
1: A, B and C
2: B, A and C
3: A and C
4: A, C and B
Answer
⬆ Back to Top
1: false
2: true
Answer
⬆ Back to Top
var y = 1;
if (function f(){}) {
y += typeof f;
}
console.log(y);
https://github.com/sudheerj/javascript-interview-questions 177/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
1: 1function
2: 1object
3: ReferenceError
4: 1undefined
Answer
⬆ Back to Top
function foo() {
return
{
message: "Hello World"
};
}
console.log(foo());
1: Hello World
2: Object {message: "Hello World"}
3: Undefined
4: SyntaxError
Answer
⬆ Back to Top
Answer
https://github.com/sudheerj/javascript-interview-questions 178/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
Answer
⬆ Back to Top
const obj = {
prop1: function() { return 0 },
prop2() { return 1 },
['prop' + 3]() { return 2 }
}
console.log(obj.prop1());
console.log(obj.prop2());
console.log(obj.prop3());
1: 0, 1, 2
2: 0, { return 1 }, 2
3: 0, { return 1 }, { return 2 }
4: 0, 1, undefined
Answer
https://github.com/sudheerj/javascript-interview-questions 179/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
1: true, true
2: true, false
3: SyntaxError, SyntaxError,
4: false, false
Answer
⬆ Back to Top
1: 1, 2, 3
2: 3, 2, 3
3: SyntaxError: Duplicate parameter name not allowed in this context
4: 1, 2, 1
Answer
⬆ Back to Top
1: 1, 2, 3
2: 3, 2, 3
https://github.com/sudheerj/javascript-interview-questions 180/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Answer
⬆ Back to Top
Answer
⬆ Back to Top
1: True, False
2: False, True
Answer
⬆ Back to Top
console.log(Math.max());
1: undefined
2: Infinity
https://github.com/sudheerj/javascript-interview-questions 181/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
3: 0
4: -Infinity
Answer
⬆ Back to Top
console.log(10 == [10]);
console.log(10 == [[[[[[[10]]]]]]]);
1: True, True
2: True, False
3: False, False
4: False, True
Answer
⬆ Back to Top
console.log(10 + '10');
console.log(10 - '10');
1: 20, 0
2: 1010, 0
3: 1010, 10-10
4: NaN, NaN
Answer
⬆ Back to Top
console.log([0] == false);
if([0]) {
console.log("I'm True");
https://github.com/sudheerj/javascript-interview-questions 182/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
} else {
console.log("I'm False");
}
Answer
1: [1,2,3,4]
2: [1,2][3,4]
3: SyntaxError
4: 1,23,4
Answer
⬆ Back to Top
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 183/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
1: True
2: False
Answer
⬆ Back to Top
1: 4
2: NaN
3: SyntaxError
4: -1
Answer
⬆ Back to Top
1: 1, [2, 3, 4, 5]
2: 1, {2, 3, 4, 5}
3: SyntaxError
4: 1, [2, 3, 4]
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 184/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Answer
⬆ Back to Top
Answer
⬆ Back to Top
function delay() {
return new Promise(resolve => setTimeout(resolve, 2000));
}
https://github.com/sudheerj/javascript-interview-questions 185/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
processArray([1, 2, 3, 4]);
1: SyntaxError
2: 1, 2, 3, 4
3: 4, 4, 4, 4
4: 4, 3, 2, 1
Answer
⬆ Back to Top
function delay() {
return new Promise(resolve => setTimeout(resolve, 2000));
}
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 186/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Answer
⬆ Back to Top
1: true, true
2: true, false
3: false, true
4: false, false
Answer
⬆ Back to Top
1: SyntaxError
2: one
https://github.com/sudheerj/javascript-interview-questions 187/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
3: Symbol('one')
4: Symbol
Answer
⬆ Back to Top
1: SyntaxError
2: It is not a string!, It is not a number!
3: It is not a string!, It is a number!
4: It is a string!, It is a number!
Answer
⬆ Back to Top
Answer
⬆ Back to Top
class A {
constructor() {
console.log(new.target.name)
}
}
new A();
new B();
1: A, A
2: A, B
Answer
⬆ Back to Top
1: 1, [2, 3, 4]
2: 1, [2, 3]
3: 1, [2]
4: SyntaxError
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 189/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
console.log(x);
console.log(y);
1: 30, 20
2: 10, 20
3: 10, undefined
4: 30, undefined
Answer
⬆ Back to Top
area();
1: 200
2: Error
3: undefined
4: 0
Answer
⬆ Back to Top
const props = [
{ id: 1, name: 'John'},
{ id: 2, name: 'Jack'},
{ id: 3, name: 'Tom'}
];
https://github.com/sudheerj/javascript-interview-questions 190/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
1: Tom
2: Error
3: undefined
4: John
Answer
⬆ Back to Top
function checkType(num = 1) {
console.log(typeof num);
}
checkType();
checkType(undefined);
checkType('');
checkType(null);
Answer
⬆ Back to Top
console.log(add('Orange'));
console.log(add('Apple'));
Answer
https://github.com/sudheerj/javascript-interview-questions 191/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
greet('Hello', 'John');
greet('Hello', 'John', 'Good morning!');
1: SyntaxError
2: ['Hello', 'John', 'Hello John'], ['Hello', 'John', 'Good morning!']
Answer
⬆ Back to Top
1: ReferenceError
2: Inner
Answer
⬆ Back to Top
myFun(1, 2, 3, 4, 5);
myFun(1, 2);
2: SyntaxError
3: [3, 4, 5], []
4: [3, 4, 5], [undefined]
Answer
⬆ Back to Top
1: ['key', 'value']
2: TypeError
3: []
4: ['key']
Answer
⬆ Back to Top
function* myGenFunc() {
yield 1;
yield 2;
yield 3;
}
var myGenObj = new myGenFunc;
console.log(myGenObj.next().value);
1: 1
2: undefined
3: SyntaxError
4: TypeError
Answer
https://github.com/sudheerj/javascript-interview-questions 193/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
function* yieldAndReturn() {
yield 1;
return 2;
yield 3;
}
1: { value: 1, done: false }, { value: 2, done: true }, { value: undefined, done: true }
2: { value: 1, done: false }, { value: 2, done: false }, { value: undefined, done: true }
3: { value: 1, done: false }, { value: 2, done: true }, { value: 3, done: true }
4: { value: 1, done: false }, { value: 2, done: false }, { value: 3, done: true }
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 194/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
Answer
⬆ Back to Top
1: SyntaxError
2: 38
Answer
⬆ Back to Top
class Square {
constructor(length) {
this.length = length;
}
get area() {
return this.length * this.length;
}
set area(value) {
this.area = value;
}
}
1: 100
2: ReferenceError
Answer
⬆ Back to Top
function Person() { }
Person.prototype.walk = function() {
return this;
}
Person.run = function() {
return this;
}
1: undefined, undefined
2: Person, Person
3: SyntaxError
4: Window, Window
Answer
⬆ Back to Top
class Vehicle {
constructor(name) {
this.name = name;
}
start() {
console.log(`${this.name} vehicle started`);
}
}
https://github.com/sudheerj/javascript-interview-questions 196/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
1: SyntaxError
2: BMW vehicle started, BMW car started
3: BMW car started, BMW vehicle started
4: BMW car started, BMW car started
Answer
⬆ Back to Top
1: 30
2: 25
3: Uncaught TypeError
4: SyntaxError
Answer
⬆ Back to Top
1: false
2: true
Answer
⬆ Back to Top
https://github.com/sudheerj/javascript-interview-questions 197/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
1: string
2: boolean
3: NaN
4: number
Answer
⬆ Back to Top
if (zero) {
console.log("If");
} else {
console.log("Else");
}
1: If
2: Else
3: NaN
4: SyntaxError
Answer
⬆ Back to Top
msg.name = "John";
console.log(msg.name);
1: ""
2: Error
3: John
4: Undefined
Answer
https://github.com/sudheerj/javascript-interview-questions 198/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
⬆ Back to Top
(function innerFunc() {
if (count === 10) {
let count = 11;
console.log(count);
}
console.log(count);
})();
1: 11, 10
2: 11, 11
3: 10, 11
4: 10, 10
Answer
⬆ Back to Top
Disclaimer
The questions provided in this repository are the summary of frequently asked questions
across numerous companies. We cannot guarantee that these questions will actually be
asked during your interview process, nor should you focus on memorizing all of them. The
primary purpose is for you to get a sense of what some companies might ask — do not get
discouraged if you don't know the answer to all of them — that is ok!
Releases
No releases published
Packages
https://github.com/sudheerj/javascript-interview-questions 199/200
24/05/2021 GitHub - sudheerj/javascript-interview-questions: List of 1000 JavaScript Interview Questions
No packages published
Contributors 29
+ 18 contributors
Languages
JavaScript 100.0%
https://github.com/sudheerj/javascript-interview-questions 200/200