This commit is contained in:
Philippe Torrel
2026-08-17 14:24:43 +02:00
parent 2f8cd0b61e
commit c7d26e1cd9
17 changed files with 1255 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exercise: Nested If-Statements</title>
</head>
<body>
<h1>Exercise: Nested If-Statements</h1>
<script>
'use strict';
const isLibraryUpdating = false;
const isUserLoggedIn = true;
const hasLibrarianPermissions = true;
const hasBookEditCapability = false;
const hasBookAccess = false;
const bookCollection = [
{
title: 'Book A',
price: 150,
quantity: 5,
},
{
title: 'Book B',
price: 250,
quantity: 0,
},
{
title: 'Book C',
price: 350,
quantity: 10,
},
];
function handleLibraryOperations() {
if (!isLibraryUpdating) {
if (isUserLoggedIn) {
if (hasLibrarianPermissions || (hasBookEditCapability && hasBookAccess)) {
bookCollection.forEach((book) => {
console.log(`Book Title: ${book.title}`);
if (book.price > 200) {
console.log('Book price is greater than 200.');
} else {
console.log('Book price is less than or equal to 200.');
}
if (book.quantity > 0) {
console.log('Book is available.');
} else {
console.log('Book is unavailable.');
}
console.log('---');
});
} else {
console.log('Insufficient rights to manage books.');
}
} else {
console.log('Please log in to manage books.');
}
} else {
console.log('Library system is currently updating.');
}
}
handleLibraryOperations();
</script>
</body>
</html>

View File

@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exercise: Nested If-Statements</title>
</head>
<body>
<h1>Exercise: Nested If-Statements</h1>
<script>
'use strict';
const isLibraryUpdating = false;
const isUserLoggedIn = true;
const hasLibrarianPermissions = true;
const hasBookEditCapability = false;
const hasBookAccess = false;
const bookCollection = [
{
title: 'Book A',
price: 150,
quantity: 5,
},
{
title: 'Book B',
price: 250,
quantity: 0,
},
{
title: 'Book C',
price: 350,
quantity: 10,
},
];
function handleLibraryOperations() {
if (!isLibraryUpdating) {
if (isUserLoggedIn) {
if (hasLibrarianPermissions || (hasBookEditCapability && hasBookAccess)) {
bookCollection.forEach((book) => {
console.log(`Book Title: ${book.title}`);
if (book.price > 200) {
console.log('Book price is greater than 200.');
} else {
console.log('Book price is less than or equal to 200.');
}
if (book.quantity > 0) {
console.log('Book is available.');
} else {
console.log('Book is unavailable.');
}
console.log('---');
});
} else {
console.log('Insufficient rights to manage books.');
}
} else {
console.log('Please log in to manage books.');
}
} else {
console.log('Library system is currently updating.');
}
}
handleLibraryOperations();
</script>
</body>
</html>

View File

@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exercise: Don't Repeat Yourself (DRY)</title>
</head>
<body>
<h1>Exercise: Don't Repeat Yourself (DRY)</h1>
<script>
'use strict';
function logWeatherReports() {
// Weather Report 1
const city1 = 'New York';
const temperature1 = 85;
const humidity1 = 70;
const description1 = 'Sunny';
const windSpeed1 = 10;
console.log(
`Weather in ${city1}: ${temperature1}°F, ${humidity1}% humidity, ${description1}, Wind Speed: ${windSpeed1} mph`
);
// Weather Report 2
const city2 = 'Los Angeles';
const temperature2 = 75;
const humidity2 = 60;
const description2 = 'Partly Cloudy';
const windSpeed2 = 7;
console.log(
`Weather in ${city2}: ${temperature2}°F, ${humidity2}% humidity, ${description2}, Wind Speed: ${windSpeed2} mph`
);
// Weather Report 3
const city3 = 'Chicago';
const temperature3 = 70;
const humidity3 = 65;
const description3 = 'Rainy';
const windSpeed3 = 12;
console.log(
`Weather in ${city3}: ${temperature3}°F, ${humidity3}% humidity, ${description3}, Wind Speed: ${windSpeed3} mph`
);
}
logWeatherReports();
</script>
</body>
</html>

View File

@@ -0,0 +1,246 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Advanced If-Else Statements (Enhanced Nesting)</title>
</head>
<body>
<h1>Advanced If-Else Statements (Enhanced Nesting)</h1>
<script>
'use strict';
let isSystemUnderMaintenance = false;
let isUserAuthenticated = true;
let userRole = 'editor'; // Possible roles: 'admin', 'editor', 'viewer'
let hasPremiumAccess = false;
let hasTwoFactorAuth = true;
let accountStatus = 'active'; // Possible statuses: 'active', 'suspended', 'closed'
let userDepartment = 'marketing'; // Possible departments: 'engineering', 'marketing', 'sales'
const userActions = [
{
action: 'viewDashboard',
requiresAdmin: false,
requiresPremium: false,
allowedDepartments: ['engineering', 'marketing', 'sales'],
},
{
action: 'editContent',
requiresAdmin: false,
requiresPremium: true,
allowedDepartments: ['marketing'],
},
{
action: 'manageUsers',
requiresAdmin: true,
requiresPremium: false,
allowedDepartments: ['engineering'],
},
{
action: 'accessAnalytics',
requiresAdmin: true,
requiresPremium: true,
allowedDepartments: ['sales', 'marketing'],
},
{
action: 'deployCode',
requiresAdmin: true,
requiresPremium: true,
allowedDepartments: ['engineering'],
},
];
function manageUserAccess() {
if (isSystemUnderMaintenance) {
console.log('System is under maintenance. Please try again later.');
return;
}
if (!isUserAuthenticated) {
console.log('User is not authenticated. Redirecting to login page.');
return;
}
if (accountStatus !== 'active') {
if (accountStatus === 'suspended') {
console.log('Account is suspended. Contact support.');
} else if (accountStatus === 'closed') {
console.log('Account is closed. Access denied.');
} else {
console.log('Unknown account status.');
}
return;
}
if (!hasTwoFactorAuth) {
console.log('Two-Factor Authentication is required for access.');
return;
}
if (userRole === 'admin') {
if (userDepartment === 'engineering') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else if (userDepartment === 'marketing') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else if (userDepartment === 'sales') {
userActions.forEach((action) => {
if (action.allowedDepartments.includes(userDepartment)) {
console.log(`Admin (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Unknown department. Access denied.');
}
} else if (userRole === 'editor') {
if (!hasPremiumAccess) {
console.log('Premium access required to edit content.');
return;
}
if (userDepartment === 'marketing') {
userActions.forEach((action) => {
if (action.requiresPremium && action.allowedDepartments.includes(userDepartment)) {
console.log(`Editor (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Editors are only allowed in the Marketing department.');
return;
}
} else if (userRole === 'viewer') {
if (userDepartment === 'sales') {
userActions.forEach((action) => {
if (
!action.requiresAdmin &&
!action.requiresPremium &&
action.allowedDepartments.includes(userDepartment)
) {
console.log(`Viewer (${userDepartment}) accessing: ${action.action}`);
}
});
} else {
console.log('Viewers are only allowed in the Sales department.');
return;
}
} else {
console.log('Unknown user role. Access denied.');
}
}
// ===== TEST CASES =====
// Test Case 1: System Under Maintenance
console.warn('Test Case 1: System Under Maintenance');
isSystemUnderMaintenance = true;
manageUserAccess(); // => "System is under maintenance. Please try again later."
resetVariables();
// Test Case 2: User Not Authenticated
console.warn('Test Case 2: User Not Authenticated');
isSystemUnderMaintenance = false;
isUserAuthenticated = false;
manageUserAccess(); // => "User is not authenticated. Redirecting to login page."
resetVariables();
// Test Case 3: Account Suspended
console.warn('Test Case 3: Account Suspended');
hasTwoFactorAuth = false;
accountStatus = 'suspended';
manageUserAccess(); // => "Account is suspended. Contact support."
resetVariables();
// Test Case 4: Missing Two-Factor Authentication
console.warn('Test Case 4: Missing Two-Factor Authentication');
hasTwoFactorAuth = false;
accountStatus = 'active';
manageUserAccess(); // => "Two-Factor Authentication is required for access."
resetVariables();
// Test Case 5: Admin Access in Marketing Department
console.warn('Test Case 5: Admin Access in Marketing Department');
userRole = 'admin';
userDepartment = 'marketing';
manageUserAccess();
// Expected Output:
// "Admin (marketing) accessing: viewDashboard"
// "Admin (marketing) accessing: editContent"
// "Admin (marketing) accessing: accessAnalytics"
resetVariables();
// Test Case 6: Editor Without Premium Access
console.warn('Test Case 6: Editor Without Premium Access');
userRole = 'editor';
hasPremiumAccess = false;
manageUserAccess(); // => "Premium access required to edit content."
resetVariables();
// Test Case 7: Editor With Premium Access in Marketing Department
console.warn('Test Case 7: Editor With Premium Access in Marketing Department');
hasPremiumAccess = true;
manageUserAccess();
// Expected Output:
// "Editor (marketing) accessing: editContent"
// "Editor (marketing) accessing: accessAnalytics"
resetVariables();
// Test Case 8: Viewer Access in Sales Department
console.warn('Test Case 8: Viewer Access in Sales Department');
userRole = 'viewer';
userDepartment = 'sales';
manageUserAccess(); // => "Viewer (sales) accessing: viewDashboard"
resetVariables();
// Test Case 9: Unknown User Role
console.warn('Test Case 9: Unknown User Role');
userRole = 'guest';
manageUserAccess(); // => "Unknown user role. Access denied."
resetVariables();
// Test Case 10: Viewer Access in Marketing Department
console.warn('Test Case 10: Viewer Access in Marketing Department');
userRole = 'viewer';
userDepartment = 'marketing';
manageUserAccess(); // => "Viewers are only allowed in the Sales department."
resetVariables();
// Test Case 11: Admin Access in Engineering Department
console.warn('Test Case 11: Admin Access in Engineering Department');
userRole = 'admin';
userDepartment = 'engineering';
manageUserAccess();
// Expected Output:
// "Admin (engineering) accessing: viewDashboard"
// "Admin (engineering) accessing: manageUsers"
// "Admin (engineering) accessing: deployCode"
resetVariables();
// Test Case 12: Editor With Premium Access in Engineering Department
console.warn('Test Case 12: Editor With Premium Access in Engineering Department');
userRole = 'editor';
hasPremiumAccess = true;
userDepartment = 'engineering';
manageUserAccess(); // => "Editors are only allowed in the Marketing department."
resetVariables();
// ===== HELPER FUNCTION =====
function resetVariables() {
isSystemUnderMaintenance = false;
isUserAuthenticated = true;
userRole = 'editor';
hasPremiumAccess = false;
hasTwoFactorAuth = true;
accountStatus = 'active';
userDepartment = 'marketing';
}
</script>
</body>
</html>

View File

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Übung 05: FormatDate Fehler</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<main>
<div class="container py-5">
<h1>Übung 05: FormatDate Fehler</h1>
</div>
</main>
<script>
'use strict';
function formatDate(date) {
const options = { year: 'numeric', month: 'long', day: 'numeric' };
formatedDate = date.toLocaleDateString(undefined, options);
return formattedDate;
}
console.log(formatDate(new Date('2023-05-31'))); // => 'May 31, 2023'
console.log(formatDate(new Date('2024-01-01'))); // => 'January 1, 2024'
</script>
</body>
</html>

View File

@@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Übung 6: Benutzer erstellen</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<main>
<div class="container py-5">
<h1>Übung 6: Benutzer erstellen</h1>
</div>
</main>
<script>
'use strict';
function createUser(name, email, age {
return {
name: name,
email: email,
age: age,
greet: () => {
console.log("Hello, " + name + "!");
},
updateEmail(newEmail) {
email = newEmail;
console.log("Email updated to " + newEmail);
}
;
}
const users = [
createUser("Alice", "alice@example.com", 30),
createUser("Bob", "bob@example.com", 25),
createUser("Charlie", "charlie@example.com", 35),
];
users.forEach(user => {
user.greet();
user.updateEmail("new_" + user.email);
});
function calculateTotal(a, b, c) {
return a + b + c;
}
console.log("Total:", calculateTotal(10, 20 30));
</script>
</body>
</html>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Übung 7: checkTemperature Fehler</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<main>
<div class="container py-5">
<h1>Übung 7: checkTemperature Fehler</h1>
<p>Versuche, den Code auszuführen, den Fehler zu identifizieren und ihn zu beheben.</p>
</div>
</main>
<script>
'use strict';
function checkTemperature(temperature) {
const threshold = 30;
const message;
if (temperature > threshold) {
message = "It's too hot outside!";
} else {
message = "The temperature is just right.";
}
console.log(message);
}
checkTemperature(25); // => "The temperature is just right."
checkTemperature(35); // => "It's too hot outside!"
</script>
</body>
</html>

View File

@@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Übung 8: Benutzer anzeigen</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<main>
<div class="container py-5">
<h1>Übung 8: Benutzer anzeigen</h1>
<p>
Der folgende Code enthält mehrere Referenzfehler, die über verschiedene Teile des Codes verteilt sind. Deine
Aufgabe ist es, alle Referenzfehler zu identifizieren und zu beheben, um sicherzustellen, dass der Code
korrekt läuft.
</p>
</div>
</main>
<script>
'use strict';
const userName = 'Emily';
function displayUserInfo() {
console.log('User Name: ' + user);
console.log('User Age: ' + age);
}
displayUserInfo();
function updateEmail(newEmail) {
userEmail = newEmail;
console.log('Email updated to ' + userEmail);
}
updateEmail('emily@example.com');
function calculateBMI(weight, height) {
return weight / (height * height);
}
const bmi = calculateBmi(70, 1.75);
console.log('BMI:', bmi);
function greetUser(name) {
if (name === 'Emily') {
console.log('Welcome back, ' + name + '!');
} else {
console.log('Hello, ' + Name + '!');
}
}
greetuser('Michael');
</script>
</body>
</html>

View File

@@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Übung 9: parseUserData Fehler</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<main>
<div class="container py-5">
<h1>Übung 9: parseUserData Fehler</h1>
<p>Die Kommentare zeigen das erwartete Ergebnis.</p>
</div>
</main>
<script>
'use strict';
function parseUserData(jsonString) {
try {
const userData = JSON.parse(jsonString);
return `User: ${userData.name}, Age: ${userData.age}`;
} catch (error) {
return `Error: ${error.message}`;
}
}
console.log(parseUserData('{"name": "Alice", "age": 30}')); // => 'User: Alice, Age: 30'
console.log(parseUserData('{"name": "Bob", "age": "thirty"}')); // => 'Error: Invalid data types'
</script>
</body>
</html>

View File

@@ -0,0 +1,40 @@
function calculateTotalPrice(items) {
let total = 0;
items.forEach((item) => {
total += item.price;
});
return total.toFixed(2);
}
const shoppingCart = [
{ name: 'Laptop', price: 999.99 },
{ name: 'Smartphone', price: '599.99' },
{ name: 'Headphones', cost: 199.99 },
];
const totalPrice = calculateTotalPrice(shoppingCart);
console.log('Total Price:', totalPrice);
function displayUserProfile(user) {
console.log(`Name: ${user.name}`);
console.log(`Age: ${user.age}`);
console.log(`Email: ${user.email.toLowerCase()}`);
}
const userProfile = {
name: 'Sarah',
age: 'twenty-five',
email: 'SARAH@EXAMPLE.COM',
};
displayUserProfile(userProfile);
function getFirstItemName(items) {
return items[0].name.toUpperCase();
}
console.log('First Item:', getFirstItemName(shoppingCart)); // => LAPTOP
const numberList = '1,2,3,4,5';
const sum = numberList.reduce((acc, num) => acc + Number(num), 0);
console.log('Sum:', sum); // => 15

Binary file not shown.

View File

@@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Type Error</title> <title>Type Error</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="04_type-error.js"></script>
</head> </head>
<body> <body>
<main> <main>

View File

@@ -0,0 +1,12 @@
"use strict";
{
function greet(name) {
console.log('Hello, ' + name);
}
function displayCar(car) {
console.log('Brand: ' + car.brand + ', Model: ' + car.model);
}
const myCar = { name: 'Toyota', model: 'Camry' };
greet(42); // => TypeError: Argument of type 'number' is not assignable to parameter of type 'string'
displayCar(myCar); // => TypeError: Argument of type '{ name: string; model: string; }' is not assignable to parameter of type 'Car'. Property 'brand' is missing in type '{ name: string; model: string; }' but required in type 'Car'.
}

View File

@@ -0,0 +1,23 @@
{
interface Car {
brand: string;
model: string;
}
function greet(name: string) {
console.log('Hello, ' + name);
}
function displayCar(car: Car) {
console.log('Brand: ' + car.brand + ', Model: ' + car.model);
}
const myCar = { name: 'Toyota', model: 'Camry' };
// greet(42); // => TypeError: Argument of type 'number' is not assignable to parameter of type 'string'
greet('11');
// displayCar(myCar); // => TypeError: Argument of type '{ name: string; model: string; }' is not assignable to parameter of type 'Car'. Property 'brand' is missing in type '{ name: string; model: string; }' but required in type 'Car'.
displayCar({ brand: 'Honda', model: 'E' });
}

View File

@@ -0,0 +1,390 @@
{
"name": "04_error-types",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "04_error-types",
"version": "1.0.0",
"devDependencies": {
"typescript": "^7.0.2"
}
},
"node_modules/@typescript/typescript-aix-ppc64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
"integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"aix"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-darwin-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
"integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-darwin-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
"integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-freebsd-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
"integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-freebsd-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
"integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-arm": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
"integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
"cpu": [
"arm"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
"integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-loong64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
"integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
"cpu": [
"loong64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-mips64el": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
"integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
"cpu": [
"mips64el"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-ppc64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
"integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-riscv64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
"integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-s390x": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
"integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
"cpu": [
"s390x"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-linux-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
"integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-netbsd-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
"integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-netbsd-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
"integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-openbsd-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
"integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-openbsd-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
"integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-sunos-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
"integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-win32-arm64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
"integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/@typescript/typescript-win32-x64": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
"integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
"cpu": [
"x64"
],
"dev": true,
"license": "Apache-2.0",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=16.20.0"
}
},
"node_modules/typescript": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
"integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc"
},
"engines": {
"node": ">=16.20.0"
},
"optionalDependencies": {
"@typescript/typescript-aix-ppc64": "7.0.2",
"@typescript/typescript-darwin-arm64": "7.0.2",
"@typescript/typescript-darwin-x64": "7.0.2",
"@typescript/typescript-freebsd-arm64": "7.0.2",
"@typescript/typescript-freebsd-x64": "7.0.2",
"@typescript/typescript-linux-arm": "7.0.2",
"@typescript/typescript-linux-arm64": "7.0.2",
"@typescript/typescript-linux-loong64": "7.0.2",
"@typescript/typescript-linux-mips64el": "7.0.2",
"@typescript/typescript-linux-ppc64": "7.0.2",
"@typescript/typescript-linux-riscv64": "7.0.2",
"@typescript/typescript-linux-s390x": "7.0.2",
"@typescript/typescript-linux-x64": "7.0.2",
"@typescript/typescript-netbsd-arm64": "7.0.2",
"@typescript/typescript-netbsd-x64": "7.0.2",
"@typescript/typescript-openbsd-arm64": "7.0.2",
"@typescript/typescript-openbsd-x64": "7.0.2",
"@typescript/typescript-sunos-x64": "7.0.2",
"@typescript/typescript-win32-arm64": "7.0.2",
"@typescript/typescript-win32-x64": "7.0.2"
}
}
}
}

View File

@@ -0,0 +1,15 @@
{
"name": "04_error-types",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "npx tsc 04_type-error.ts"
},
"keywords": [],
"type": "commonjs",
"devDependencies": {
"typescript": "^7.0.2"
}
}

View File

@@ -0,0 +1,135 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Logical Error</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
</head>
<body>
<main>
<div class="container py-5">
<h1>Logical Error</h1>
</div>
</main>
<script>
'use strict';
{
const n = 10;
// if (n % 2 === 0) {
// console.log('odd'); // Annahme vertauscht
// } else {
// console.log('even');
// }
// const evenNumbers = _.range(11).filter((n) => n % 2);
const evenNumbers = _.range(11).filter((n) => n % 2 === 0);
console.log('evenNumbers:', evenNumbers);
// [x]: Ist die Jahreszahl ohne Rest durch 4 teilbar, ist es ein Schaltjahr (z.B. 2024).
// [x]: Ist die Jahreszahl durch 100 teilbar, ist es kein Schaltjahr (z.B. 1900).
// [x]: Ist die Jahreszahl durch 400 teilbar, ist es doch ein Schaltjahr (z.B. 2000).
// function isLeapYear(year) {
// if (year % 4 === 0) {
// return true;
// } else if (year % 100 === 0) {
// return true;
// } else if (year % 400 === 0) {
// return true;
// } else {
// return false;
// }
// }
const isLeapYear = (year) => {
// if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
// return true;
// } else {
// return false;
// }
return (!isNaN(year) && year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
};
// Test cases
console.log(isLeapYear(2020)); // => true, Expected output: true (leap year)
console.log(isLeapYear(1900)); // => true, Expected output: false (not a leap year)
console.log(isLeapYear(2000)); // => true, Expected output: true (leap year)
// ==========
// function printCharacters(str) {
// console.log(str[1] + str[4] + str[6]);
// }
// function solve(str) {
// printCharacters(str);
// }
// solve('Release a new iPhone every year'); // => 'eae', Expected Output: 'Res'
function printCharacters(str) {
console.log(str[0] + str[3] + str[5]);
}
function solve(str) {
printCharacters(str);
}
solve('Release a new iPhone every year'); // => 'Res'
// =============
// // Incorrect index example
// function findAverageLength(words) {
// if (words.length === 0) {
// return 0;
// }
// let totalLength = 0;
// for (let i = 1; i < words.length; i++) {
// if (typeof words[i] === 'string') {
// totalLength += words[i].length;
// }
// }
// return totalLength / words.length;
// }
// const words = ['apple', 'banana', 'orange'];
// console.log(findAverageLength(words)); // 4 -> Expected output: 5.6666...
// Incorrect index example
function findAverageLength(words) {
if (words.length === 0) {
return 0;
}
let totalLength = 0;
for (let i = 0; i < words.length; i++) {
if (typeof words[i] === 'string') {
totalLength += words[i].length;
}
}
return totalLength / words.length;
}
const words = ['apple', 'banana', 'orange'];
console.time('for() avg length');
console.log(findAverageLength(words)); // 4 -> Expected output: 5.6666...
console.timeEnd('for() avg length');
console.time('join() avg length');
console.log(words.join('').length / words.length);
console.timeEnd('join() avg length');
}
</script>
</body>
</html>