Salesforce-JavaScript-Developer Practice Test Questions

221 Questions


Given the code below:
Setcurrent URL ();
console.log(‘The current URL is: ‘ +url );
function setCurrentUrl() {
Url = window.location.href:
What happens when the code executes?


A. The url variable has local scope and line 02 throws an error.


B. The url variable has global scope and line 02 executes correctly.


C. The url variable has global scope and line 02 throws an error.


D. The url variable has local scope and line 02 executes correctly.





B.
  The url variable has global scope and line 02 executes correctly.

Explanation:

This question tests the understanding of variable scope, specifically the concept of implied globals and the difference between var, let, const, and undeclared variables.

Let's break down the code:
Line 01: setCurrentUrl(); - This calls the function setCurrentUrl.
Line 02: console.log('The current URL is: ' + url); - This attempts to log the value of a variable named url.
Line 03-05: The function setCurrentUrl is defined.
function setCurrentUrl() {
url = window.location.href;
}

The key is what happens inside the function on Line 04: url = window.location.href;
The variable url is not declared with var, let, or const inside the function.
In non-strict mode (which is likely the default context here), assigning a value to an undeclared variable implicitly creates a global variable.
Therefore, when setCurrentUrl() is executed on Line 01, it creates a global variable named url and assigns it the value of window.location.href.

Now, let's evaluate the options:
A. The url variable has local scope and line 02 throws an error. This is incorrect. Because the variable was not declared with var, let, or const inside the function, it does not have local scope. It becomes a global.
B. The url variable has global scope and line 02 executes correctly. This is correct. As explained, the assignment inside the function without a declaration creates a global variable. By the time Line 02 executes, the global variable url exists and holds a value, so the console.log statement works without throwing an error.
C. The url variable has global scope and line 02 throws an error. This is incorrect. While the variable does have global scope, Line 02 will not throw an error because the variable exists in the global scope when the line is executed.
D. The url variable has local scope and line 02 executes correctly. This is incorrect. The variable does not have local scope (it's global), and if it did have local scope (e.g., if it was declared with let url = ...), then Line 02 would indeed throw a ReferenceError because it would be trying to access a variable from a scope where it is not defined.

Reference:
MDN Web Docs on undeclared variables:
The concept of "implied globals" is a classic behavior of JavaScript's non-strict mode.

Conclusion:
The code creates a global variable, allowing the console.log statement to access it and execute successfully.

A developer is required to write a function that calculates the sum of elements in an array but is getting undefined every time the code is executed. The developer needs to find what is missing in the code below.
Const sumFunction = arr => {
Return arr.reduce((result, current) => {
//
Result += current;
//
), 10);
);
Which option makes the code work as expected?


A. Replace line 02 with return arr.map(( result, current) => (


B. Replace line 04 with result = result +current;


C. Replace line 03 with if(arr.length == 0 ) ( return 0; )


D. Replace line 05 with return result;





D.
  Replace line 05 with return result;

Explanation:

🧠 Problem Breakdown
Here’s the broken code (cleaned up for clarity):
const sumFunction = arr => {
return arr.reduce((result, current) => {
result += current;
// Missing return here!
}, 10);
};

The issue:
The callback inside reduce() is not returning the updated result.
In arrow functions with {}, you must explicitly return a value.
Without a return, reduce() passes undefined as the accumulator in the next iteration.

D. Replace line 05 with return result;
This fixes the function by ensuring the callback returns the updated accumulator:
const sumFunction = arr => {
return arr.reduce((result, current) => {
result += current;
return result;
}, 10);
};

Why the other options fail:
A. Replace with map()
map() returns a new array, not a sum. Wrong method.
B. Use result = result + current; ❌
Still missing return result; — syntax is fine, logic still broken.
C. Add if(arr.length == 0) return 0; ❌
Defensive coding, but doesn’t fix the missing return inside reduce().
D. Add return result; ✅
Corrects the missing return inside the reduce() callback.

🔁 Bonus Tip:
You can simplify the function using an implicit return:
const sumFunction = arr => arr.reduce((result, current) => result + current, 10);

Developer creates a new web server that uses Node.js. It imports a server library that uses events and callbacks for handling server functionality. The server library is imported with require and is made available to the code by a variable named server. The developer wants to log any issues that the server has while booting up. Given the code and the information the developer has, which code logs an error at boost with an event?


A. Server.catch ((server) => {
console.log(‘ERROR’, error);
});


B. Server.error ((server) => {
console.log(‘ERROR’, error);
});


C. Server.on (‘error’, (error) => {
console.log(‘ERROR’, error);
});


D. Try{
server.start();
} catch(error) {
console.log(‘ERROR’, error);





C.
  Server.on (‘error’, (error) => {
console.log(‘ERROR’, error);
});

Explanation:

🔎 Key facts
In Node.js, objects that emit events (like http.Server) are instances of EventEmitter.
To listen for errors, you must register an error event listener:
server.on('error', (error) => {
console.error('ERROR', error);
});

catch only works with synchronous errors in a try...catch block. Asynchronous events (like server boot errors) must be handled with .on('error', …).

Wrong options
A. server.catch(...)
No .catch() method on EventEmitter objects. That’s for Promises. ❌
B. server.error(...)
Not a valid method. Error events must be attached with .on('error', …). ❌
D. try { server.start(); } catch(error) {...}
Won’t catch async startup issues — only synchronous code inside start() itself. ❌

Correct option
C. server.on('error', (error) => { console.log('ERROR', error); });
This is the correct way to handle startup or runtime errors emitted by a Node.js server.

📚 Reference:
Node.js – EventEmitter error event
Node.js HTTP Server error handling

Given the following code:
Let x =(‘15’ + 10)*2;
What is the value of a?


A. 3020


B. 1520


C. 50


D. 35





A.
  3020

Explanation:

Code Analysis
let x = ('15' + 10) * 2;
'15' + 10: The + operator concatenates the string '15' with the number 10 (coerced to '10'), resulting in the string '1510'.
'1510' * 2: The * operator coerces the string '1510' to the number 1510, then multiplies by 2, yielding 3020.
x is assigned 3020 (a number).
The question asks for a, but the code defines x. Assuming a typo (common in exam questions), the value of x is 3020. No information is provided about a.

Options
A. 3020: Correct, matches the result.
B. 1520: Incorrect, would require numeric addition (15 + 10), not concatenation.
C. 50: Incorrect, assumes numeric addition 15 + 10 = 25, then 25 * 2.
D. 35: Incorrect, misinterprets the operation (e.g., 15 + 10 + 10).

Explanation Notes
JavaScript’s + operator performs string concatenation when one operand is a string.
The * operator coerces a numeric string to a number for multiplication.
The question likely meant x instead of a. If a is a separate variable, additional context is needed.

References:
MDN: Addition (+)
MDN: Type Coercion
Salesforce JavaScript Developer I exams test type coercion and operator behavior.

A developer creates an object where its properties should be immutable and prevent properties from being added or modified. Which method should be used to execute this business requirement?


A. Object.const()


B. Object.eval()


C. Object.lock()


D. Object.freeze()





D.
  Object.freeze()

Explanation:

This question tests the knowledge of JavaScript methods used to control the mutability of objects. The requirement is to make an object's properties immutable and to prevent properties from being added or modified. This is the exact functionality provided by Object.freeze().

Let's break down what Object.freeze() does:
Makes existing properties non-writable: You cannot change their values.
Makes existing properties non-configurable: You cannot delete them or change their attributes (e.g., make them writable again).
Prevents new properties from being added: The object becomes sealed against any extensions.
After calling Object.freeze(obj), any attempt to add, modify, or delete properties will fail silently in non-strict mode or throw a TypeError in strict mode.

Example:
const myObject = {
prop1: 42,
prop2: 'Hello World'
};

Object.freeze(myObject);

myObject.prop1 = 100; // This assignment will fail silently (or throw an error in strict mode) console.log(myObject.prop1); // Output: 42 (unchanged)
myObject.prop3 = 'New'; // Fails, cannot add new properties
delete myObject.prop2; // Fails, cannot delete properties

Now, let's evaluate why the other options are incorrect:
A. Object.const():
This method does not exist in JavaScript. The const keyword is used for declaring block-scoped variables, but it does not make the object itself immutable. A const object can still have its properties modified (e.g., const obj = {}; obj.a = 1; is allowed).
B. Object.eval():
This method does not exist for the purpose of immutability. The global eval() function is used to evaluate JavaScript code represented as a string, and its use is generally discouraged due to security and performance implications. It has nothing to do with controlling object properties.
C. Object.lock():
This method does not exist in standard JavaScript. It might be a distractor based on similar concepts in other programming languages.

Reference:
MDN Web Docs on Object.freeze():

Conclusion:
To fulfill the business requirement of making an object completely immutable—preventing any additions, modifications, or deletions of its properties—the correct method to use is Object.freeze().

Given the following code:
document.body.addEventListener(‘ click ’, (event) => {
if (/* CODE REPLACEMENT HERE */) {
console.log(‘button clicked!’);
)
});
Which replacement for the conditional statement on line 02 allows a developer to correctly determine that a button on page is clicked?


A. Event.clicked


B. e.nodeTarget ==this


C. event.target.nodeName == ‘BUTTON’


D. button.addEventListener(‘click’)





C.
  event.target.nodeName == ‘BUTTON’

Explanation:

This code snippet uses event delegation, a powerful technique where a single event listener is placed on a parent element to manage events for all its child elements. The event listener is on the document.body, and it listens for a click event anywhere on the page.

The event.target property refers to the specific element that was clicked.
The nodeName property of an element returns the name of the node, which for HTML elements is the tag name in uppercase. For a button, this would be 'BUTTON'.

Therefore, by checking if event.target.nodeName is equal to 'BUTTON', the developer can accurately determine if the clicked element was a button.

Why Other Options Are Incorrect
A. Event.clicked:
clicked is not a standard property of the Event object. This would result in an error or an undefined value.
B. e.nodeTarget == this:
e.nodeTarget is not a standard property; the correct property is event.target.
In an arrow function, this refers to the parent scope, which in this case is the document.body. This comparison would only be true if the document.body itself was clicked, not a child button.
D. button.addEventListener('click'):
This is a method call, not a conditional statement. It would attempt to add an event listener inside the if condition, which is syntactically and logically incorrect.

Refer to the expression below:
Let x = (‘1’ + 2) == (6 * 2);
How should this expression be modified to ensure that evaluates to false?


A. Let x = (‘1’ + ‘ 2’) == ( 6 * 2);


B. Let x = (‘1’ + 2) == ( 6 * 2);


C. Let x = (1 + 2) == ( ‘6’ / 2);


D. Let x = (1 + 2 ) == ( 6 / 2);





A.
  Let x = (‘1’ + ‘ 2’) == ( 6 * 2);

Explanation:

🔍 Original Expression:
let x = ('1' + 2) == (6 * 2);
Breakdown:
'1' + 2 → '12' (string concatenation)
6 * 2 → 12 (number)
'12' == 12 → true (because == does type coercion)

Goal:
We want to modify the expression so it evaluates to false.

Correct Answer:
A. let x = ('1' + ' 2') == (6 * 2);

Why?
'1' + ' 2' → '1 2' (note the space!)
6 * 2 → 12
'1 2' == 12 → false Because '1 2' is not coercible to the number 12.

Why the other options fail:
B. '1' + 2 == 12
✅ true Same as original — still evaluates to true.
C. (1 + 2) == ('6' / 2)
✅ true 3 == 3 — both sides are numbers.
D. (1 + 2) == (6 / 2)
✅ true 3 == 3 again — still true.

🧠 Key Concepts:
+ with a string → triggers string concatenation
== → performs type coercion
To force false, you need non-equivalent values after coercion

A developer wants to set up a secure web server with Node.js. The developer creates a directory locally called app-server, and the first file is app-server/index.js Without using any third-party libraries, what should the developer add to index.js to create the secure web server?


A. const https =require(‘https’);


B. const server =require(‘secure-server’);


C. const tls = require(‘tls’);


D. const http =require(‘http’);





A.
  const https =require(‘https’);

Explanation:

🔎 Key facts:
Node.js has a built-in https module for creating secure (SSL/TLS) web servers.
The http module is for plain, non-secure servers.
The tls module handles lower-level TLS/SSL sockets, but it’s not used directly to serve HTTPS web traffic.
There is no built-in secure-server module — that’s a fake distractor.

Check options:
A. const https = require('https'); ✅
Correct! This loads Node’s core https module, used to create secure HTTPS servers.
B. const server = require('secure-server'); ❌
Not a real Node.js core module.
C. const tls = require('tls'); ❌
This provides raw TLS socket support. Too low-level for setting up a web server.
D. const http = require('http'); ❌
This creates insecure HTTP servers, not HTTPS.
Correct Answer: A. const https = require('https');

📚 Reference:
Node.js Docs – https module
Node.js Docs – http module

A test has a dependency on database. query. During the test, the dependency is replaced with an object called database with the method, Calculator query, that returns an array. The developer does not need to verify how many times the method has been called. Which two test approaches describe the requirement?
(Choose 2 answers)


A. White box


B. Stubbing


C. Black box


D. Substitution





B.
  Stubbing

C.
  Black box

Explanation:

Replacing the database.query dependency with a stand-in object that returns a fixed array without inspecting its internal behavior or verifying invocation counts is characteristic of stubbing and black-box testing. Stubbing provides a lightweight test double that returns predetermined data. Black-box testing focuses on inputs and outputs, ignoring the internal implementation and call frequency. White-box testing would require awareness of internal logic and verifying interactions, which is not needed here. Substitution is not a formal testing term in mainstream methodologies. Therefore, the appropriate approaches are stubbing to replace dependencies and black-box testing to validate behavior purely by the returned data.

A Developer wrote the following code to test a sum3 function that takes in an array of numbers and returns the sum of the first three number in the array, The test passes:
Let res = sum2([1, 2, 3 ]) ;
console.assert(res === 6 );
Res = sum3([ 1, 2, 3, 4]);
console.assert(res=== 6);
A different developer made changes to the behavior of sum3 to instead sum all of the numbers present in the array. The test passes:
Which two results occur when running the test on the updated sum3 function?
(Choose 2 answers)


A. The line 02 assertion passes.


B. The line 02 assertion fails


C. The line 05 assertion passes.


D. The line 05 assertion fails.





A.
  The line 02 assertion passes.

D.
  The line 05 assertion fails.

Explanation:

With the updated sum3 that sums all elements, calling sum3([1,2,3]) still returns 6, so the first console.assert(res === 6) passes. However, sum3([1,2,3,4]) now returns 10, not 6, so the second assertion fails. Thus, line 02 succeeds (A), and line 05 fails (D). This highlights the importance of writing tests that capture intended behavior changes: when functionality broadens from summing only the first three items to summing the entire array, existing tests may no longer validate correct behavior for all inputs.

Refer to the code below:
01 const exec = (item, delay) =>{
02 new Promise(resolve => setTimeout( () => resolve(item), delay)),
03 async function runParallel() {
04 Const (result1, result2, result3) = await Promise.all{
05 [exec (‘x’, ‘100’) , exec(‘y’, 500), exec(‘z’, ‘100’)]
06 );
07 return `parallel is done: $(result1) $(result2)$(result3)`;
08 }
}
}
Which two statements correctly execute the runParallel () function?
(Choose 2 answers)


A. Async runParallel () .then(data);


B. runParallel ( ). done(function(data){
return data;
});


C. runParallel () .then(data);


D. runParallel () .then(function(data)
return data





C.
  runParallel () .then(data);

D.
  runParallel () .then(function(data)
return data

Explanation:

Because runParallel() is an async function, it returns a Promise. You consume its result via the Promise API’s .then(...) handler. Options C and D correctly call runParallel() and attach a .then callback to process its resolved value. Option A incorrectly prefixes with Async, which isn’t valid syntax for invocation. Option B uses .done(...), a non-standard Promise method (found in some libraries but not native JavaScript). Always use .then(...) or await to handle async function results in modern JavaScript.

A developer has the following array of student test grades:
Let arr = [ 7, 8, 5, 8, 9 ];
The Teacher wants to double each score and then see an array of the students who scored more than 15 points. How should the developer implement the request?


A. Let arr1 = arr.filter(( val) => ( return val > 15 )) .map (( num) => ( return num *2 ))


B. Let arr1 = arr.mapBy (( num) => ( return num *2 )) .filterBy (( val ) => return val > 15 )) ;


C. Let arr1 = arr.map((num) => num*2). Filter (( val) => val > 15);


D. Let arr1 = arr.map((num) => ( num *2)).filterBy((val) => ( val >15 ));





C.
  Let arr1 = arr.map((num) => num*2). Filter (( val) => val > 15);

Explanation:

You first double each grade using Array.prototype.map(), producing [14,16,10,16,18]. Then you filter scores above 15 with Array.prototype.filter(), yielding [16,16,18]. This chaining ensures the mapping happens before filtering. Option A reverses the order (filter then map), B and D use non-standard methods (mapBy/filterBy), which don’t exist in vanilla JavaScript. Option C correctly leverages built-in map and filter methods in the proper sequence to meet the teacher’s requirements.


Page 2 out of 19 Pages
Previous