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 essential for the exam, followed by Mermaid knowledge graphs to visualize relationships.
Template Syntax:
{{ message }} (one-way binding).Directives:
v-bind (e.g., :title="msg"): Binds attributes dynamically.v-model: Two-way data binding (e.g., <input v-model="inputValue">).v-on (e.g., @click="doSomething"): Event handling.v-if/v-show: Conditional rendering (v-if removes from DOM; v-show toggles display: none).v-for: Iterates over arrays/objects (e.g., v-for="n in numbers").v-cloak: Hides uncompiled templates until Vue initializes.<slot name="header">) for component content distribution.:title="message").methods object (e.g., orderCoffee()).v-model or this.message = 'new value').created, mounted, etc.// Two-way binding
<input v-model="inputValue"> // Equivalent to :value + @input
// Conditional rendering
<p v-if="isVisible">Visible</p> // Removes from DOM if false
<p v-show="isVisible">Visible</p> // Toggles CSS display
// Event handling
<button @click="handleClick">Click</button>
// Dynamic attribute binding
<img v-bind:src="imageUrl" :alt="imageAlt">
// Slots
<child-component>
<template slot="header"><h1>Title</h1></template>
</child-component>
Array Methods:
sort((a, b) => a.age - b.age): Sorts numerically.filter(item => item.age >= 25): Returns a new array with matching items.map(item => item.name.toUpperCase()): Transforms each item.join('-'): Concatenates array elements into a string.Closures & Scope:
click in Q6).var vs. let: var is function-scoped; let is block-scoped.this Binding:
this from the surrounding scope.this (depends on how called).Class Inheritance:
extends, super(), method overriding (e.g., describe() in Q14).Event Listeners:
addEventListener vs. onclick: Multiple listeners can be added with addEventListener.Default Parameters:
function multiply(a = 1, b = 1) { ... } handles undefined values.// Sorting
arr.sort((a, b) => a.age - b.age); // Ascending numerical sort
// Chaining array methods
const result = products
.filter(item => item.inStock)
.map(item => ({ ...item, discountedPrice: item.price * 0.9 }));
// Closure example
function camera() {
let subject = "Deer";
function click() {
console.log(subject); // Accesses outer 'subject'
}
subject = "Cat";
return click;
}
// 'this' in arrow vs. regular functions
const obj = {
method: () => console.log(this), // 'this' is lexical (window/global)
method2() { console.log(this); } // 'this' is the object
};
// Class inheritance
class Child extends Parent {
constructor() {
super(); // Calls Parent's constructor
}
}
Event Propagation:
addEventListener allows multiple handlers (unlike onclick, which overwrites).Programmatic Events:
btn.click() triggers all attached event listeners.// Multiple event listeners
btn.addEventListener('click', () => console.log('A'));
btn.addEventListener('click', () => console.log('B')); // Both run
// Overwriting onclick
btn.onclick = () => console.log('C'); // Replaces previous onclick