Home / Past papers / MAD2 Quiz 1 / this paper

```
{{ message }} for interpolation
```
```html v-bind:title="msg" ``` for binding attributes

```html v-on:@click="doSomething" ``` for click event binding

```html <input v-model="inputValue"></input> ``` for two-way binding

Consider the following JavaScript code:
```javascript
let employees = [
{ name: "Rahul", age: 28 },
{ name: "Priya", age: 24 },
{ name: "Amit", age: 32 }
];
employees.sort((a, b) => a.age - b.age);
console.log(employees.map(e => e.name).join(" - "));
```
What will be printed on the console?
Consider the following JavaScript code snippet.
```javascript
const users = [
{ name: "Amit", age: 25 },
{ name: "Bhavna", age: 20 },
{ name: "Chirag", age: 30 },
];
const names = users
.filter((u) => u.age >= 25)
.map((u) => u.name.toUpperCase())
.sort();
console.log(JSON.stringify(names));
```
What is logged on the console?
Consider the following JavaScript code snippet.
```javascript
let subject = "Dog";
function camera() {
let subject = "Deer";
function click() {
console.log(`clicked picture of ${subject}`);
}
subject = "Cat";
return click;
}
let cameraPicture = camera();
cameraPicture();
```
What is logged to the console?
Match the following Vue 2 directives in Column A with their correct functionality in Column B: | Column A | Column B | |---|---| | 1. v-bind | A. Creates two-way data binding between form inputs and Vue data properties | | 2. v-model | B. Conditionally shows or hides elements using CSS display property | | 3. v-on | C. Binds HTML attributes or component properties to Vue data expressions | | 4. v-show | D. Attaches event listeners to DOM elements for handling user interactions | | 5. v-cloak | E. Prevents the flash of un-compiled template content before Vue initializes |

Consider the following HTML, with the correct Vue 2 CDN links included
```html
<body>
<div id="app">
<p>Coffee</p>
<button @click="orderCoffee">Order</button>
<p>Total Cost: {{totalCost}}</p>
<p>Order Count: {{orderCount}}</p>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
totalCost: '0',
unitPrice: 25,
orderCount: 0
}
},
methods: {
orderCoffee() {
this.totalCost += this.unitPrice;
this.orderCount++;
}
}
})
</script>
</body>
```
What will be displayed for "Total Cost" and "Order Count" when the Order button is clicked three times?
Total Cost: 75, Order Count: 3

Total Cost: 02525, Order Count: 3

Total Cost: 252525, Order Count: 3

Total Cost: 0252525, Order Count: 3

Consider this nested loop is written in JavaScript:
```javascript
let result = "";
for (let i = 0; i < 2; i++) {
for (var j = 0; j < 2; j++) {
result += i + j;
}
}
console.log(result);
```
Which of the following statements is/are true?
The output is "0011".

The inner loop runs 2 times for each outer loop iteration.

The output is "0123"

The values are concatenated into a **string**, not added as numbers.

Consider the following HTML and JavaScript code.
HTML file
```html
<button id="btn">Click Me</button>
<script>
const btn = document.getElementById('btn');
btn.addEventListener('click', () => console.log('A'));
btn.onclick = () => console.log('B');
btn.addEventListener('click', () => console.log('C'));
btn.click();
</script>
```
Among the following console log statements, which ones will be logged when the code executes?
(Select **all** that apply, irrespective of the order.)
Consider the following HTML and JavaScript, assume Vue 2 CDN link to be already included.
index.html:
```html
<div id="app">
<p v-for="n in numbers">{{ n }}</p>
</div>
<script src="app.js" ></script>
```
app.js:
```javascript
var app = new Vue({
el: "#app",
data: { numbers: [1, 2, 3] },
});
app.data.numbers.push(4);
```
How many `<p>` elements will be rendered?
Consider the following JavaScript code snippet:
```javascript
const products = [
{ name: 'Laptop', price: 1200, category: 'Electronics', inStock: true },
{ name: 'Book', price: 25, category: 'Education', inStock: false },
{ name: 'Phone', price: 800, category: 'Electronics', inStock: true },
{ name: 'Pen', price: 5, category: 'Stationery', inStock: true },
{ name: 'Tablet', price: 600, category: 'Electronics', inStock: false }
];
const result = products
.filter(item => item.category === 'Electronics' && item.inStock)
.map(item => ({ ...item, discountedPrice: item.price * 0.9 }))
.filter(item => item.discountedPrice > 500);
console.log(result.length);
console.log(result[0].name);
```
What will be the output of the above code on the browser's console?
``` 3 Laptop ```

2 Laptop

1 Phone

2 Phone

Consider the below JavaScript program:
```javascript
const globalVar = 50;
const object1 = {
globalVar: 100,
method1: function() {
console.log(globalVar, this.globalVar);
return () => {
console.log(globalVar, this.globalVar);
}
}
}
const object2 = {
globalVar: 200,
method2: () => {
console.log(globalVar, this.globalVar);
return function() {
console.log(globalVar, this.globalVar);
}
}
}
const fn1 = object1.method1();
fn1();
const fn2 = object2.method2();
fn2();
```
What will be the output of the above program on the browser's console, if executed?
``` 50 100 50 100 50 undefined 50 undefined ```

``` 50 100 50 100 50 undefined 50 200 ```

``` 100 50 100 50 200 50 200 50 ```

``` 50 100 50 100 50 undefined 50 this ```

Consider the following JavaScript code:
```javascript
class Region {
constructor(region) {
this.region = region;
}
describe() {
return `${this.region} is a region.`;
}
}
class Country extends Region {
constructor(region, name) {
super(region);
this.name = name;
}
describe() {
return `${this.name} is in ${this.region}.`;
}
}
let r = new Region("Asia");
let c = new Country("Europe", "Germany");
let f = c.describe;
```
Which of the following statements are **true**?
Calling r.describe() prints "Asia is a region."

Calling c.describe() prints "Germany is in Europe."

Calling f() directly will still print "Germany is in Europe."

The Country class overrides both the **constructor** and the **describe()** method from Region.

The call to super (region) inside Country's constructor is **not required** to initialize this.region.

Consider the following JavaScript function definitions. Which of the following will correctly return the product of three numbers and handle the case where any parameter is undefined by treating it as 1?

```javascript
let multiply = (a, b, c) => {
a = a || 1;
b = b || 1;
c = c || 1;
return a * b * c;
}
```
```javascript
function multiply(a = 1, b = 1, c = 1) {
return a * b * c;
}
```
```javascript
let multiply = (a, b, c) => {
return (a ?? 1) * (b ?? 1) * (c ?? 1);
}
```
```javascript
const multiply = function(a, b, c) {
if(a === undefined) a = 1;
if(b === undefined) b = 1;
if(c === undefined) c = 1;
a * b * c;
}
```

If the user types "hi" into the input box, what happens on the page, choose the closest to correct?

Only `<p>` updates to "hi", but `<h2>` remains "Hello Vue".

Both `<p>` and `<h2>` update and display "h1".

Only `<h3>` changes to "HI", but `<p>` and `<h2>` remain unchanged.

Nothing updates at all.

Which Vue.js features are shown in the code?

Two-way data binding using v-model.

Use of a named `slot` inside a child component.

Passing values from parent to child using props.

Use of lifecycle hooks.
Auto-generated summary from the source site. Handy as a checklist; the lessons above explain each idea from scratch.
Here’s a structured summary of core topics, concepts, and principles for the exam, along with Mermaid knowledge graphs to visualize relationships.
Template Syntax:
{{ message }} (interpolation).v-bind (attribute binding, e.g., :title="msg").v-on (event binding, e.g., @click="doSomething").v-model (two-way data binding, e.g., <input v-model="inputValue">).Conditional Rendering:
v-if: Removes elements from the DOM when false.v-show: Toggles display: none (no DOM removal).Directives:
v-for: Loop rendering.v-cloak: Hides uncompiled templates until Vue initializes.Slots:
<slot name="header">) for component content distribution.Props & Data Flow:
props.$emit.v-cloak relates to initialization.// Two-way binding
<input v-model="inputValue"> // Equivalent to :value + @input
// Dynamic attribute binding
<div :class="{ active: isActive }"></div>
// Event handling
<button @click="handleClick">Click</button>
// Conditional rendering
<p v-if="show">Visible if `show` is true</p>
<p v-show="show">Always in DOM, toggles visibility</p>
Array Methods:
sort(), map(), filter(), reduce().array.filter().map().sort().Closures & Scope:
let vs. var).this binding in functions vs. arrow functions.Event Handling:
addEventListener vs. onclick.Classes & Inheritance:
extends, super(), method overriding.Default Parameters:
function foo(a = 1) { ... } vs. a = a || 1.Asynchronous Behavior:
// Array sorting (ascending by age)
employees.sort((a, b) => a.age - b.age);
// Filter + Map + Sort chaining
const result = products
.filter(item => item.inStock)
.map(item => ({ ...item, discountedPrice: item.price * 0.9 }))
.sort((a, b) => a.price - b.price);
// Closure example
function outer() {
let x = 10;
return function inner() { console.log(x); }; // Remembers `x`
}
// Class inheritance
class Parent {
constructor() { this.value = 1; }
}
class Child extends Parent {
constructor() { super(); this.value = 2; }
}
Event Listeners:
addEventListener).onclick overwrites previous handlers.Dynamic Updates:
innerHTML).Slot Content:
// Multiple event listeners
button.addEventListener('click', () => console.log('A'));
button.onclick = () => console.log('B'); // Overwrites!
button.addEventListener('click', () => console.log('C'));
// Output on click: A, B, C (if using addEventListener for all)
// Vue slot example
<child-component>
<template v-slot:header>
<h1>Slotted Content</h1>
</template>
</child-component>
Immutability:
map, filter to avoid side effects.Pure Functions:
sort with a comparator).Default Parameters:
undefined with a = 1 or a ?? 1.// Immutable update
const newArray = oldArray.map(item => ({ ...item, price: item.price * 0.9 }));
// Default parameters (modern)
function multiply(a = 1, b = 1) { return a * b; }
// vs. legacy
function multiply(a, b) { return (a || 1) * (b || 1); }
| Concept | Equation/Code | Notes |
|---|---|---|
| Array Sort | arr.sort((a, b) => a - b) | Ascending numerical sort. |
| Filter + Map Chaining | arr.filter(x => x > 0).map(x => x*2) | Immutable transformation. |
| Default Parameters | function foo(a = 1) { ... } | Modern syntax. |
| Closure | function outer() { let x=10; return () => x; } | Remembers x. |
| Two-Way Binding | <input v-model="msg"> | Equivalent to :value + @input. |
| Conditional Rendering | v-if="show" vs. v-show="show" | v-if removes DOM node; v-show hides it. |
Vue.js:
v-bind, v-model, v-if/v-show, and slots.v-if (DOM removal) and v-show (CSS toggle).JavaScript:
filter, map, sort, reduce).this binding, and scope (let vs. var).DOM Events:
addEventListener and onclick.addEventListener allows multiple handlers.Functional Programming:
map/filter over loops for immutability.a = 1) instead of a || 1 (which fails for a = 0).Vue.js Reactivity:
v-model is syntactic sugar for :value + @input.Final Note: The exam emphasizes Vue.js template syntax, JavaScript array methods, closures, and DOM event handling. Focus on these areas, and practice writing small code snippets to reinforce concepts.