First paragraph
+Second paragraph
+diff --git a/LANGS.md b/LANGS.md index 3a7cb16e..1437e42a 100644 --- a/LANGS.md +++ b/LANGS.md @@ -5,4 +5,5 @@ - [Indonesian](id/) - [Español](es/) - [Deutsch](de/) -- [中文 (简体)](cn/) \ No newline at end of file +- [中文 (简体)](cn/) +- [தமிழ் (Tamil)](ta/) \ No newline at end of file diff --git a/_layouts/website/languages.html b/_layouts/website/languages.html index c7198dfe..3b45881b 100644 --- a/_layouts/website/languages.html +++ b/_layouts/website/languages.html @@ -53,7 +53,7 @@
|
+
+ + Suman Kunwar + + |
+
let doubledNumbers = numbers.map((number) => {
+ return number * 2;
+});
+
+
+அல்லது
+
+```typescript
+let doubledNumbers = numbers.map(number => number * 2);
+```
+
+{% hint style="info" %}
+`map()` முறை காலி உறுப்புகளுக்கு செயல்பாட்டை இயக்காது மற்றும் அசல் வரிசையை மாற்றாது.
+{% endhint %}
diff --git a/ta/arrays/pop.md b/ta/arrays/pop.md
new file mode 100644
index 00000000..12ffa1ac
--- /dev/null
+++ b/ta/arrays/pop.md
@@ -0,0 +1,40 @@
+---
+chapter: 6
+pageNumber: 52
+description: pop முறைகள் வரிசையின் கடைசி உறுப்பை நீக்கி முடிவை திரும்பப் பெறுகிறது. இந்த முறை வரிசை நீளத்தை மாற்றுகிறது.
+---
+# Pop
+
+`pop` முறை ஒரு வரிசையிலிருந்து கடைசி உறுப்பை நீக்கி அந்த உறுப்பை திரும்பப் பெறுகிறது. இந்த முறை வரிசையின் நீளத்தை மாற்றுகிறது.
+
+`pop` பயன்படுத்துவதற்கான தொடரியல் இங்கே:
+
+```c
+array.pop();
+```
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let arr = ["one", "two", "three", "four", "five"];
+arr.pop();
+
+console.log(arr);
+
+// Result: ['one', 'two', 'three', 'four']
+```
+
+ஒரு வரிசையிலிருந்து அனைத்து உறுப்புகளையும் நீக்க ஒரு loop உடன் இணைந்து `pop` முறையைப் பயன்படுத்தலாம். இதை எவ்வாறு செய்வது என்பதற்கான எடுத்துக்காட்டு:
+
+```c
+while (array.length > 0) {
+ array.pop();
+}
+
+console.log(array); // Result: []
+```
+
+{% hint style="working" %}
+`pop` முறை வரிசைகளில் மட்டுமே செயல்படுகிறது, arguments பொருட்கள் அல்லது NodeList பொருட்கள் போன்ற வரிசைகளுக்கு ஒத்த மற்ற பொருட்களில் அல்ல. இந்த வகையான பொருட்களிலிருந்து உறுப்புகளை pop செய்ய வேண்டும் என்றால், முதலில் `Array.prototype.slice()` முறையைப் பயன்படுத்தி வரிசையாக மாற்ற வேண்டும்.
+
+{% endhint %}
diff --git a/ta/arrays/push.md b/ta/arrays/push.md
new file mode 100644
index 00000000..c1e304dd
--- /dev/null
+++ b/ta/arrays/push.md
@@ -0,0 +1,41 @@
+---
+chapter: 6
+pageNumber: 55
+description: push முறை கடைசி குறியீட்டை புதிதாக சேர்க்கப்பட்ட உருப்படியாக ஆக்கி வரிசையில் உறுப்பை சேர்க்கிறது. இந்த முறை வரிசை நீளத்தை மாற்றி புதிய நீளத்தை திரும்பப் பெறுகிறது.
+---
+# Push
+
+ஒரு வரிசையில் சில உருப்படிகளை push செய்து கடைசி குறியீட்டை புதிதாக சேர்க்கப்பட்ட உருப்படியாக ஆக்கலாம். இது ஒரு வரிசையின் நீளத்தை மாற்றி புதிய நீளத்தை திரும்பப் பெறுகிறது.
+
+`push` பயன்படுத்துவதற்கான தொடரியல் இங்கே:
+
+```c
+array.push(element1[, ...[, elementN]]);
+```
+
+`element1, ..., elementN` வாதங்கள் வரிசையின் இறுதியில் சேர்க்கப்பட வேண்டிய உறுப்புகளை குறிக்கின்றன.
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let array = [1, 2, 3];
+array.push(4);
+
+console.log(array);
+
+// Result: array = [1, 2, 3, 4]
+```
+
+முதலில் `Array.prototype.slice()` முறையைப் பயன்படுத்தி வரிசையாக மாற்றி array-like பொருளின் (arguments பொருள் அல்லது NodeList பொருள் போன்ற) இறுதியில் உறுப்புகளை சேர்க்கவும் `push` ஐப் பயன்படுத்தலாம்:
+
+```javascript
+function printArguments() {
+ let args = Array.prototype.slice.call(arguments);
+ args.push('d', 'e', 'f');
+ console.log(args);
+}
+
+printArguments('a', 'b', 'c'); // Result: ["a", "b", "c", "d", "e", "f"]
+```
+
+> **குறிப்பு**: `push` முறை அசல் வரிசையை மாற்றுகிறது. இது புதிய வரிசையை உருவாக்காது.
diff --git a/ta/arrays/reverse.md b/ta/arrays/reverse.md
new file mode 100644
index 00000000..668fd4c7
--- /dev/null
+++ b/ta/arrays/reverse.md
@@ -0,0 +1,40 @@
+---
+chapter: 6
+pageNumber: 59
+description: reverse முறை வரிசையின் உறுப்புகளை இடத்திலேயே தலைகீழாக மாற்றுகிறது.
+---
+# தலைகீழாக்கு
+
+`reverse` முறையை சரங்களின் வரிசைகள், எண்களின் வரிசைகள் மற்றும் பொருட்களின் வரிசைகள் உட்பட எந்த வகையான வரிசையிலும் பயன்படுத்தலாம். எடுத்துக்காட்டாக:
+
+```javascript
+let users = [{
+ name: "John Smith",
+ age: 30
+}, {
+ name: "Jane Doe",
+ age: 25
+}];
+
+users.reverse();
+
+console.log(users);
+
+// RESULT:
+[{
+ name: "Jane Doe",
+ age: 25
+}, {
+ name: "John Smith",
+ age: 30
+}];
+```
+
+`reverse` முறை அழைக்கும் வரிசை பொருளின் உறுப்புகளை இடத்திலேயே மாற்றி வரிசையை mutate செய்து வரிசையை குறிப்பை திரும்பப் பெறுகிறது.
+ஒரு வரிசையின் `reverse` பயன்படுத்துவதற்கான எடுத்துக்காட்டு:
+
+```javascript
+const numbers = [1, 2, 3];
+const newLength = numbers.reverse();
+console.log(numbers); // [3, 2, 1]
+```
diff --git a/ta/arrays/shift.md b/ta/arrays/shift.md
new file mode 100644
index 00000000..610f1123
--- /dev/null
+++ b/ta/arrays/shift.md
@@ -0,0 +1,35 @@
+---
+chapter: 6
+pageNumber: 51
+description: shift முறை வரிசையின் முதல் குறியீட்டு உறுப்பை நீக்கி அனைத்து குறியீடுகளையும் இடதுபுறம் நகர்த்துகிறது. இது அசல் வரிசையை மாற்றுகிறது.
+---
+# Shift
+
+`shift` முறை அந்த வரிசையின் முதல் குறியீட்டை நீக்கி அனைத்து குறியீடுகளையும் இடதுபுறம் நகர்த்துகிறது. இது அசல் வரிசையை மாற்றுகிறது. `shift` பயன்படுத்துவதற்கான தொடரியல் இங்கே:
+
+```c
+array.shift();
+```
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let array = [1, 2, 3];
+array.shift();
+
+// Result: array = [2,3]
+```
+
+ஒரு வரிசையிலிருந்து அனைத்து உறுப்புகளையும் நீக்க ஒரு loop உடன் இணைந்து `shift` முறையைப் பயன்படுத்தலாம். இதை எவ்வாறு செய்வது என்பதற்கான எடுத்துக்காட்டு:
+
+```c
+while (array.length > 0) {
+ array.shift();
+}
+
+console.log(array); // Result: []
+```
+
+{% hint style="working" %}
+`shift` முறை வரிசைகளில் மட்டுமே செயல்படுகிறது, arguments பொருட்கள் அல்லது NodeList பொருட்கள் போன்ற வரிசைகளுக்கு ஒத்த மற்ற பொருட்களில் அல்ல. இந்த வகையான பொருட்களிலிருந்து உறுப்புகளை shift செய்ய வேண்டும் என்றால், முதலில் `Array.prototype.slice()` முறையைப் பயன்படுத்தி வரிசையாக மாற்ற வேண்டும்.
+{% endhint %}
diff --git a/ta/arrays/slice.md b/ta/arrays/slice.md
new file mode 100644
index 00000000..bb7037e2
--- /dev/null
+++ b/ta/arrays/slice.md
@@ -0,0 +1,50 @@
+---
+chapter: 6
+pageNumber: 60
+description: Javascript arr.slice() முறை அது செயல்படுத்தப்படும் வரிசையின் ஒரு பகுதியை கொண்ட புதிய வரிசையை திரும்பப் பெறுகிறது. அசல் மாறாமல் இருக்கும்.
+---
+# Slice
+
+`slice` முறை begin மற்றும் end என்ற இரண்டு அளவுருக்களை ஏற்கிறது.
+* **begin**: இந்த அளவுரு பகுதியை பிரித்தெடுக்கும் தொடக்க குறியீட்டை வரையறுக்கிறது.
+ இந்த வாதம் இல்லாவிட்டால் முறை begin ஐ `0` என எடுக்கும் ஏனென்றால் இது இயல்புநிலை தொடக்க மதிப்பு.
+* **end**: இந்த அளவுரு பகுதியை பிரித்தெடுக்கும் குறியீடு (end குறியீட்டை தவிர்த்து).
+ இந்த வாதம் வரையறுக்கப்படவில்லை என்றால் இறுதி வரை உள்ள வரிசை பிரித்தெடுக்கப்படும், ஏனென்றால் இது இயல்புநிலை இறுதி மதிப்பு. end மதிப்பு வரிசையின் நீளத்தை விட அதிகமாக இருந்தால், end மதிப்பு வரிசையின் நீளமாக மாறும்.
+
+```javascript
+function func() {
+ //அசல் வரிசை
+ let arr = [23, 56, 87, 32, 75, 13];
+ //பிரித்தெடுக்கப்பட்ட வரிசை
+ let new_arr = arr.slice();
+ console.log(arr);
+ console.log(new_arr);
+}
+func();
+
+
+// RESULT:
+[23,56,87,32,75,13]
+[23,56,87,32,75,13]
+```
+
+`slice()` முறை புதிய வரிசையில் பொருள் குறிப்புகளை நகலெடுக்கிறது (எடுத்துக்காட்டாக, நெஸ்டட் வரிசை). எனவே, குறிப்பிடப்பட்ட பொருள் மாற்றப்பட்டால், மாற்றங்கள் திரும்பப் பெற்ற புதிய வரிசையில் தெரியும்.
+
+```javascript
+let human = {
+ name: "David",
+ age: 23,
+};
+
+let arr = [human, "Nepal", "Manager"];
+let new_arr = arr.slice();
+
+// அசல் பொருள்
+console.log(arr[0]); // { name: 'David', age: 23 }
+
+// புதிய வரிசையில் உள்ள பொருளை மாற்றுதல்
+new_arr[0].name = "Levy";
+
+// மாற்றங்கள் பிரதிபலிக்கின்றன
+console.log(arr[0]); // { name: 'Levy', age: 23 }
+```
diff --git a/ta/arrays/sort.md b/ta/arrays/sort.md
new file mode 100644
index 00000000..0d6545c7
--- /dev/null
+++ b/ta/arrays/sort.md
@@ -0,0 +1,49 @@
+---
+chapter: 6
+pageNumber: 57
+description: sort முறை ஒரு வரிசையின் உருப்படிகளை குறிப்பிட்ட வரிசையில் வரிசைப்படுத்துகிறது. இயல்பாக, இது உறுப்புகளை சரங்களாக வரிசைப்படுத்தி அவற்றின் UTF-16 குறியீட்டு அலகு மதிப்புகளின் அடிப்படையில் ஏறுவரிசையில் அமைக்கிறது.
+---
+# வரிசைப்படுத்து
+
+`sort` முறை ஒரு வரிசையின் உருப்படிகளை குறிப்பிட்ட வரிசையில் (ஏறுவரிசை அல்லது இறங்குவரிசை) வரிசைப்படுத்துகிறது. இயல்பாக, `sort` முறை உறுப்புகளை சரங்களாக வரிசைப்படுத்தி அவற்றின் UTF-16 குறியீட்டு அலகு மதிப்புகளின் அடிப்படையில் ஏறுவரிசையில் அமைக்கிறது.
+
+`sort` பயன்படுத்துவதற்கான தொடரியல் இங்கே:
+
+```c
+array.sort([compareFunction]);
+```
+
+`compareFunction` வாதம் விரும்பினால் மட்டுமே மற்றும் வரிசைப்படுத்தல் வரிசையை வரையறுக்கும் ஒரு செயல்பாட்டை குறிப்பிடுகிறது. தவிர்க்கப்பட்டால், உறுப்புகள் அவற்றின் சர குறிப்பீட்டின் படி ஏறுவரிசையில் வரிசைப்படுத்தப்படுகின்றன.
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let city = ["California", "Barcelona", "Paris", "Kathmandu"];
+let sortedCity = city.sort();
+
+console.log(sortedCity);
+
+// Result: ['Barcelona', 'California', 'Kathmandu', 'Paris']
+
+```
+
+{% hint style="info" %}
+எண்களை வரிசைப்படுத்தும்போது அவை தவறாக வரிசைப்படுத்தப்படலாம். எடுத்துக்காட்டாக, "35" "100" ஐ விட பெரியது, ஏனென்றால் "3" "1" ஐ விட பெரியது.
+{% endhint %}
+
+எண்களில் வரிசைப்படுத்தல் சிக்கலை சரிசெய்ய, compare functions பயன்படுத்தப்படுகின்றன. Compare functions வரிசைப்படுத்தல் வரிசைகளை வரையறுக்கின்றன மற்றும் வாதங்களின் அடிப்படையில் **எதிர்மறை**, **பூஜ்ஜியம்**, அல்லது **நேர்மறை** மதிப்பை திரும்பப் பெறுகின்றன, இவ்வாறு:
+
+* `a` ஐ `b` க்கு முன்பு வரிசைப்படுத்த வேண்டும் என்றால் எதிர்மறை மதிப்பு
+* `a` ஐ `b` க்கு பிறகு வரிசைப்படுத்த வேண்டும் என்றால் நேர்மறை மதிப்பு
+* `a` மற்றும் `b` சமனாக இருந்து அவற்றின் வரிசை முக்கியமில்லை என்றால் `0`
+
+```javascript
+const points = [40, 100, 1, 5, 25, 10];
+points.sort((a, b) => {return a-b});
+
+// Result: [1, 5, 10, 25, 40, 100]
+```
+
+{% hint style="working" %}
+`sort()` முறை அசல் வரிசையை மேலெழுதுகிறது.
+{% endhint %}
diff --git a/ta/arrays/spread.md b/ta/arrays/spread.md
new file mode 100644
index 00000000..20b837a4
--- /dev/null
+++ b/ta/arrays/spread.md
@@ -0,0 +1,32 @@
+---
+chapter: 6
+pageNumber: 50
+description: Spread ஆபரேட்டர் வரிசை அல்லது பொருளை வரிசைகள் மற்றும் பொருட்களை விரைவாக கையாள அனுமதிக்கிறது. இது வரிசைகளிலிருந்து உறுப்புகளை நகலெடுக்க, இணைக்க அல்லது பிரித்தெடுக்க மற்றும் பொருட்களிலிருந்து பண்புகளை நகலெடுக்க சுருக்கமான தொடரியலை வழங்குகிறது.
+---
+# Spread
+
+Spread ஆபரேட்டரைப் `(...)` பயன்படுத்தி ஒரு வரிசை அல்லது பொருளை மற்றொரு வரிசை அல்லது பொருளில் விரைவாக நகலெடுக்கலாம். ஒரு வரிசை போன்ற iterable ஐ பூஜ்ஜியம் அல்லது அதிகமான வாதங்கள் (செயல்பாடு அழைப்புகளுக்கு) அல்லது உறுப்புகள் (வரிசை literals க்கு) எதிர்பார்க்கப்படும் இடங்களில் விரிவாக்க, அல்லது பூஜ்ஜியம் அல்லது அதிகமான key-value ஜோடிகள் (பொருள் literals க்கு) எதிர்பார்க்கப்படும் இடங்களில் ஒரு பொருள் வெளிப்பாட்டை விரிவாக்க இது அனுமதிக்கிறது.
+
+இதற்கான சில எடுத்துக்காட்டுகள்:
+
+```javascript
+let arr = [1, 2, 3, 4, 5];
+
+console.log(...arr);
+// Result: 1 2 3 4 5
+
+let arr1;
+arr1 = [...arr]; //arr ஐ arr1 இல் நகலெடுக்கிறது
+
+console.log(arr1); //Result: [1, 2, 3, 4, 5]
+
+arr1 = [6,7];
+arr = [...arr,...arr1];
+
+console.log(arr); //Result: [1, 2, 3, 4, 5, 6, 7]
+
+```
+
+{% hint style="working" %}
+spread ஆபரேட்டர் அம்சத்தை ஆதரிக்கும் நவீன உலாவிகளில் மட்டுமே செயல்படுகிறது. பழைய உலாவிகளை ஆதரிக்க வேண்டும் என்றால், spread ஆபரேட்டர் தொடரியலை சமான ES5 குறியீட்டாக மாற்ற Babel போன்ற transpiler ஐப் பயன்படுத்த வேண்டும்.
+{% endhint %}
diff --git a/ta/arrays/unshift.md b/ta/arrays/unshift.md
new file mode 100644
index 00000000..6506eafc
--- /dev/null
+++ b/ta/arrays/unshift.md
@@ -0,0 +1,30 @@
+---
+chapter: 6
+pageNumber: 48
+description: வரிசையின் தொடக்கத்தில் ஒரு உறுப்பை சேர்க்க unshift முறையைப் பயன்படுத்தலாம். இது அசல் வரிசையை மாற்றி புதிய வரிசை நீளத்தை திரும்பப் பெறுகிறது.
+---
+# Unshift
+
+`unshift` முறை வரிசையின் தொடக்கத்தில் அல்லது முன்பகுதியில் புதிய உறுப்புகளை வரிசையாக சேர்க்கிறது. இது அசல் வரிசையை மாற்றி வரிசையின் புதிய நீளத்தை திரும்பப் பெறுகிறது. எடுத்துக்காட்டாக:
+
+```javascript
+let array = [0, 5, 10];
+array.unshift(-5); // 4
+
+// RESULT: array = [-5 , 0, 5, 10];
+```
+
+{% hint style="working" %}
+`unshift()` முறை அசல் வரிசையை மேலெழுதுகிறது.
+{% endhint %}
+
+`unshift` முறை ஒன்று அல்லது அதிகமான வாதங்களை எடுக்கிறது, இவை வரிசையின் தொடக்கத்தில் சேர்க்கப்பட வேண்டிய உறுப்புகளை குறிக்கின்றன. அவை வழங்கப்படும் வரிசையில் உறுப்புகளை சேர்க்கிறது, எனவே முதல் உறுப்பு வரிசையின் முதல் உறுப்பாக இருக்கும்.
+
+ஒரு வரிசையில் பல உறுப்புகளை சேர்க்க `unshift` ஐப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு:
+
+```javascript
+const numbers = [1, 2, 3];
+const newLength = numbers.unshift(-1, 0);
+console.log(numbers); // [-1, 0, 1, 2, 3]
+console.log(newLength); // 5
+```
diff --git a/ta/basics/README.md b/ta/basics/README.md
new file mode 100644
index 00000000..10425f43
--- /dev/null
+++ b/ta/basics/README.md
@@ -0,0 +1,33 @@
+---
+layout: editorial
+chapter: 2
+pageNumber: 11
+description: நிரலாக்கம் என்பது குறியீடு எழுதுவதாகும். ஒரு புத்தகம் அத்தியாயங்கள், பத்திகள், வாக்கியங்கள், சொற்றொடர்கள், வார்த்தைகள் மற்றும் இறுதியில் நிறுத்தற்குறிகள் மற்றும் எழுத்துகளால் ஆனது, அதேபோல் ஒரு நிரலை சிறிய மற்றும் சிறிய கூறுகளாக உடைக்கலாம்.
+---
+
+# அத்தியாயம் 2
+# அடிப்படைகள்
+
+இந்த முதல் அத்தியாயத்தில், நிரலாக்கம் மற்றும் Javascript மொழியின் அடிப்படைகளை கற்போம்.
+
+நிரலாக்கம் என்பது குறியீடு எழுதுவதாகும். ஒரு புத்தகம் அத்தியாயங்கள், பத்திகள், வாக்கியங்கள், சொற்றொடர்கள், வார்த்தைகள் மற்றும் இறுதியில் நிறுத்தற்குறிகள் மற்றும் எழுத்துகளால் ஆனது, அதேபோல் ஒரு நிரலை சிறிய மற்றும் சிறிய கூறுகளாக உடைக்கலாம். இப்போதைக்கு, மிக முக்கியமானது ஒரு அறிக்கையாகும். ஒரு அறிக்கை புத்தகத்தில் ஒரு வாக்கியத்திற்கு ஒத்ததாகும். சொந்தமாக, இது கட்டமைப்பு மற்றும் நோக்கம் கொண்டுள்ளது, ஆனால் அதைச் சுற்றியுள்ள மற்ற அறிக்கைகளின் சூழல் இல்லாமல், அது அர்த்தமுள்ளதாக இல்லை.
+
+ஒரு அறிக்கை சாதாரணமாக (மற்றும் பொதுவாக) _குறியீட்டின் ஒரு வரி_ என்று அழைக்கப்படுகிறது. ஏனென்றால் அறிக்கைகள் தனித்தனி வரிகளில் எழுதப்படுகின்றன. எனவே, நிரல்கள் மேலிருந்து கீழாக, இடமிருந்து வலமாக படிக்கப்படுகின்றன. குறியீடு (மூல குறியீடு என்றும் அழைக்கப்படுகிறது) என்னவென்று நீங்கள் யோசிக்கலாம். அது நிரலின் முழுமையையோ அல்லது சிறிய பகுதியையோ குறிக்கும் ஒரு பரந்த வார்த்தையாகும். எனவே, குறியீட்டின் ஒரு வரி என்பது உங்கள் நிரலின் ஒரு வரி மட்டுமே.
+
+இங்கே ஒரு எளிய எடுத்துக்காட்டு:
+
+```javascript
+let hello = "Hello";
+let world = "World";
+
+// Message equals "Hello World"
+let message = hello + " " + world;
+```
+
+இந்த குறியீடு _மொழிபெயர்ப்பாளர்_ என்று அழைக்கப்படும் மற்றொரு நிரலால் இயக்கப்படலாம், இது குறியீட்டை படிக்கும் மற்றும் அனைத்து அறிக்கைகளையும் சரியான வரிசையில் இயக்கும்.
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளை ஆராய்வோம்:
+* [கருத்துகள்](./comments.md)
+* [சமத்துவம்](./equality.md)
+* [வகைகள்](./types.md)
+* [மாறிகள்](./variables.md)
diff --git a/ta/basics/comments.md b/ta/basics/comments.md
new file mode 100644
index 00000000..a8e2799e
--- /dev/null
+++ b/ta/basics/comments.md
@@ -0,0 +1,80 @@
+---
+chapter: 2
+pageNumber: 12
+description: கருத்துகள் மற்ற நிரலாளர்களுக்கு அல்லது குறியீட்டைப் பற்றிய சிறிய விளக்கங்களுக்கான குறிப்புகளை குறிக்க பயன்படுத்தப்படுகின்றன, இது மற்றவர்களுக்கு புரிந்துகொள்ள உதவுகிறது. இந்த அறிக்கைகள் மொழிபெயர்ப்பாளரால் இயக்கப்படுவதில்லை.
+---
+
+# கருத்துகள்
+
+கருத்துகள் என்பது மொழிபெயர்ப்பாளரால் இயக்கப்படாத அறிக்கைகளாகும். அவை மற்ற நிரலாளர்களுக்கான குறிப்புகளை குறிக்க அல்லது குறியீடு என்ன செய்கிறது என்பதற்கான சிறிய விளக்கங்களை வழங்க பயன்படுத்தப்படுகின்றன, இதனால் உங்கள் குறியீடு என்ன செய்கிறது என்பதை மற்றவர்கள் புரிந்துகொள்வது எளிதாகிறது. நிரல் கட்டுப்பாட்டு ஓட்டத்தை பாதிக்காமல் குறியீட்டை தற்காலிகமாக முடக்கவும் பயன்படுகின்றன.
+
+## கருத்துகளின் வகைகள்
+
+### ஒற்றை வரி கருத்துகள்
+
+ஒற்றை-வரி கருத்துகள் இரண்டு முன்னோக்கு சாய்வுக்கோடுகளுடன் (`//`) தொடங்கி வரியின் முடிவு வரை தொடரும். சாய்வுக்கோடுகளைத் தொடர்ந்து எதுவும் JavaScript மொழிபெயர்ப்பாளரால் புறக்கணிக்கப்படும்.
+
+```javascript
+// இது ஒரு கருத்து, இது மொழிபெயர்ப்பாளரால் புறக்கணிக்கப்படும்
+let a = "இது ஒரு மாறி";
+```
+
+ஒரு வரியின் முடிவிலும் பயன்படுத்தலாம்:
+
+```javascript
+let b = 5; // இதுவும் ஒரு சரியான ஒற்றை-வரி கருத்து
+```
+
+### பல-வரி கருத்துகள்
+பல-வரி கருத்துகள் `/*` உடன் தொடங்கி `*/` உடன் முடியும். இடையில் உள்ள அனைத்தும் புறக்கணிக்கப்படும்.
+
+```javascript
+/*
+ இது ஒரு பல-வரி கருத்து.
+ மிகவும் சிக்கலான தர்க்கத்தை விளக்க
+ அல்லது குறியீட்டை தற்காலிகமாக தடுக்க பயன்படுத்தலாம்.
+*/
+let x = 10;
+```
+
+### கருத்துகளின் உண்மையான எடுத்துக்காட்டுகள்
+```javascript
+// தலைப்பை மாற்று:
+document.getElementById("myH").innerHTML = "என் முதல் பக்கம்";
+
+// பத்தியை மாற்று:
+document.getElementById("myP").innerHTML = "என் முதல் பத்தி.";
+```
+
+```javascript
+/*
+ புதிய UI ஓட்டத்தை சோதிக்கும் போது வரவேற்பு செய்தி தற்காலிகமாக முடக்கப்பட்டது.
+*/
+
+/*
+document.getElementById("myH").innerHTML = "மீண்டும் வரவேற்கிறோம்!";
+document.getElementById("myP").innerHTML = "மீண்டும் உங்களை பார்க்கவே மகிழ்ச்சி.";
+*/
+```
+
+பிழைத்திருத்த நோக்கங்களுக்கும் பயனுள்ளவை:
+
+```javascript
+let total = 0;
+// total = calculateTotal(items); // சோதனையின் போது தற்காலிகமாக முடக்கப்பட்டது
+```
+
+```javascript
+/*
+ உள்நுழைவு சிக்கலுக்கான பிழைத்திருத்த பதிவுகள்
+ சிக்கல் தீர்க்கப்பட்ட பிறகு கருத்தாடப்பட்டது
+*/
+
+/*
+console.log("பயனர் தரவு:", user);
+console.log("Auth token:", token);
+console.log("API இலிருந்து பதில்:", response);
+*/
+```
+
+குறியீட்டில் கருத்துகளை சேர்ப்பது குறியீட்டின் தரத்தை பராமரிக்கவும், ஒத்துழைப்பை இயக்கவும் மற்றும் பிழைத்திருத்த செயல்முறையை எளிதாக்கவும் அவசியம். நிரலின் பல்வேறு பகுதிகளுக்கு சூழல் மற்றும் விளக்கங்களை வழங்குவதன் மூலம், கருத்துகள் எதிர்காலத்தில் குறியீட்டை புரிந்துகொள்வதை எளிதாக்குகின்றன. எனவே, குறியீட்டில் கருத்துகளை சேர்ப்பது ஒரு பயனுள்ள நடைமுறையாக கருதப்படுகிறது.
\ No newline at end of file
diff --git a/ta/basics/equality.md b/ta/basics/equality.md
new file mode 100644
index 00000000..339ce0ee
--- /dev/null
+++ b/ta/basics/equality.md
@@ -0,0 +1,56 @@
+---
+chapter: 2
+pageNumber: 17
+description: சமத்துவ ஆபரேட்டர் ஒப்பீட்டிற்கு பயன்படுத்தப்படுகிறது. இரண்டு மாறிகள் சமனாக இருக்கின்றனவா என்பதை தீர்மானிக்க பயன்படுத்தலாம், அவை ஒரே வகையில் இல்லாவிட்டாலும் கூட.
+---
+
+# சமத்துவம்
+
+ஒரு நிரலை எழுதும் போது, பிற மாறிகளுடன் தொடர்பாக மாறிகளின் சமத்துவத்தை அடிக்கடி தீர்மானிக்க வேண்டும். இது சமத்துவ ஆபரேட்டரைப் பயன்படுத்தி செய்யப்படுகிறது. மிக அடிப்படையான சமத்துவ ஆபரேட்டர் `==` ஆபரேட்டராகும். இந்த ஆபரேட்டர் இரண்டு மாறிகள் சமனாக இருக்கின்றனவா என்பதை தீர்மானிக்க தன்னால் முடிந்ததையெல்லாம் செய்கிறது, அவை ஒரே வகையில் இல்லாவிட்டாலும் கூட.
+
+எடுத்துக்காட்டாக, அனுமானிக்கவும்:
+
+```javascript
+let foo = 42;
+let bar = 42;
+let baz = "42";
+let qux = "life";
+```
+
+`foo == bar` `true` என மதிப்பிடப்படும் மற்றும் `baz == qux` `false` என மதிப்பிடப்படும், ஒருவர் எதிர்பார்ப்பதுபோல். இருப்பினும், `foo` மற்றும் `baz` வெவ்வேறு வகைகளாக இருந்தாலும் `foo == baz` `true` என மதிப்பிடப்படும். திரைக்கு பின்னால் `==` சமத்துவ ஆபரேட்டர் சமத்துவத்தை தீர்மானிக்கும் முன்பு அதன் operand களை ஒரே வகைக்கு மாற்ற முயற்சிக்கிறது. இது `===` சமத்துவ ஆபரேட்டருக்கு மாறானது.
+
+`===` சமத்துவ ஆபரேட்டர் இரண்டு மாறிகள் ஒரே வகையில் இருந்தால் _மற்றும்_ ஒரே மதிப்பை கொண்டிருந்தால் அவை சமனாக இருப்பதாக தீர்மானிக்கிறது. முன்பு போல் அதே அனுமானங்களுடன், இதன் பொருள் `foo === bar` இன்னும் `true` என மதிப்பிடப்படும், ஆனால் `foo === baz` இப்போது `false` என மதிப்பிடப்படும். `baz === qux` இன்னும் `false` என மதிப்பிடப்படும்.
+
+{% exercise %}
+`str1` மற்றும் `str2` இன் மதிப்புகளை ஒப்பிட `==` மற்றும் `===` ஆபரேட்டரைப் பயன்படுத்தவும்.
+
+{% initial %}
+let str1 = "hello";
+let str2 = "HELLO";
+let bool1 = true;
+let bool2 = 1;
+// == பயன்படுத்தி ஒப்பிடவும்
+let stringResult1 =
+let boolResult1 =
+// === பயன்படுத்தி ஒப்பிடவும்
+let stringResult1 =
+let boolResult2 =
+{% solution %}
+let str1 = "hello";
+let str2 = "HELLO";
+let bool1 = true;
+let bool2 = 1;
+// == பயன்படுத்தி ஒப்பிடவும்
+let stringResult1 = str1 == str2 // false
+let boolResult1 = bool1 == bool2 // true
+
+// === பயன்படுத்தி ஒப்பிடவும்
+let stringResult2 = str1 === str2 // false
+let boolResult2 = bool1 === bool2 // false
+
+
+{% validation %}
+assert(stringResult1 === false && stringResult2 === false && boolResult1 ==true && boolResult2 === false );
+
+{% context %}
+{% endexercise %}
diff --git a/ta/basics/types.md b/ta/basics/types.md
new file mode 100644
index 00000000..a9ac11a4
--- /dev/null
+++ b/ta/basics/types.md
@@ -0,0 +1,103 @@
+---
+chapter: 2
+pageNumber: 15
+description: வகைகள் என்பது மொழியில் குறிப்பிடப்படும் மற்றும் கையாளப்படும் தரவின் வகைகளாகும்.
+---
+
+# வகைகள்
+
+கணினிகள் சுவாரஸ்யமானவை மற்றும் வெறும் எண்களை விட மிகவும் சிக்கலான மாறிகளை பயன்படுத்த முடியும். இங்கே மாறி வகைகள் வருகின்றன. மாறிகள் பல வகைகளில் வருகின்றன மற்றும் வெவ்வேறு மொழிகள் வெவ்வேறு வகைகளை ஆதரிக்கின்றன.
+
+மிகவும் பொதுவான வகைகள்:
+
+* **Number (எண்)**: எண்கள் முழு எண்களாக (எ.கா., `1`, `-5`, `100`) அல்லது மிதவை-புள்ளி மதிப்புகளாக (எ.கா., `3.14`, `-2.5`, `0.01`) இருக்கலாம். JavaScript இல் முழு எண்கள் மற்றும் மிதவை-புள்ளி மதிப்புகளுக்கு தனித்தனி வகை இல்லை; இரண்டையும் எண்களாக கருதுகிறது.
+* **String (சரம்)**: சரங்கள் எழுத்துகளின் வரிசைகளாகும், ஒற்றை மேற்கோள்கள் (எ.கா., `'hello'`) அல்லது இரட்டை மேற்கோள்கள் (எ.கா., `"world"`) மூலம் குறிப்பிடப்படுகின்றன.
+* **Boolean**: Boolean கள் உண்மை அல்லது பொய் மதிப்பை குறிக்கின்றன. அவை `true` அல்லது `false` என எழுதலாம் (மேற்கோள்கள் இல்லாமல்).
+* **Null**: null வகை ஒரு null மதிப்பை குறிக்கிறது, இது "மதிப்பு இல்லை" என்று பொருள்படும். அதை `null` என எழுதலாம் (மேற்கோள்கள் இல்லாமல்).
+* **Undefined**: undefined வகை அமைக்கப்படாத மதிப்பை குறிக்கிறது. ஒரு மாறி அறிவிக்கப்பட்டிருந்தால் ஆனால் மதிப்பு ஒதுக்கப்படவில்லை என்றால், அது `undefined`.
+* **Object (பொருள்)**: ஒரு பொருள் பண்புகளின் தொகுப்பாகும், ஒவ்வொன்றும் பெயர் மற்றும் மதிப்பு கொண்டது. சுருள் பிரேஸ்களைப் (`{}`) பயன்படுத்தி மற்றும் பெயர்-மதிப்பு ஜோடிகளைப் பயன்படுத்தி பண்புகளை ஒதுக்கி ஒரு பொருளை உருவாக்கலாம்.
+* **Array (வரிசை)**: ஒரு வரிசை என்பது உருப்படிகளின் தொகுப்பை வைத்திருக்கக்கூடிய ஒரு சிறப்பு வகையான பொருளாகும். சதுர அடைப்புக்குறிகளைப் (`[]`) பயன்படுத்தி மற்றும் மதிப்புகளின் பட்டியலை ஒதுக்கி ஒரு வரிசையை உருவாக்கலாம்.
+* **Function (செயல்பாடு)**: ஒரு செயல்பாடு என்பது வரையறுக்கப்பட்டு பின்னர் பெயரால் அழைக்கக்கூடிய குறியீட்டின் ஒரு block. [செயல்பாடுகள்](../functions/README.md) வாதங்களை (உள்ளீடுகளை) ஏற்கலாம் மற்றும் ஒரு மதிப்பை (வெளியீட்டை) திரும்பப் பெறலாம். `function` முக்கியசொல்லைப் பயன்படுத்தி ஒரு செயல்பாட்டை உருவாக்கலாம்.
+
+JavaScript ஒரு "_loosely typed_" மொழியாகும், அதாவது மாறிகள் என்ன வகையான தரவு என்பதை நீங்கள் வெளிப்படையாக அறிவிக்க வேண்டியதில்லை. நீங்கள் ஒரு மாறியை அறிவிக்கிறீர்கள் என்பதை குறிக்க `var` முக்கியசொல்லை பயன்படுத்த வேண்டும், மேலும் மொழிபெயர்ப்பாளர் சூழலில் இருந்து மற்றும் மேற்கோள்களின் பயன்பாட்டிலிருந்து நீங்கள் என்ன தரவு வகை பயன்படுத்துகிறீர்கள் என்பதை கண்டுபிடிக்கும்.
+
+{% exercise %}
+மூன்று மாறிகளை அறிவித்து அவற்றை பின்வரும் மதிப்புகளுடன் தொடங்கவும்: `age` எண்ணாக, `name` சரமாக மற்றும் `isMarried` boolean ஆக.
+
+{% initial %}
+let age =
+let name =
+let isMarried =
+{% solution %}
+let age = 30
+let name = "Cecilia"
+let isMarried = true
+
+{% validation %}
+assert(typeof age === "number" && typeof name === "string" && typeof isMarried === "boolean");
+
+{% context %}
+{% endexercise %}
+
+`typeof` ஆபரேட்டர் ஒரு மாறியின் தரவு வகைகளை சரிபார்க்க பயன்படுத்தப்படுகிறது.
+
+```javascript
+typeof "John" // "string" திரும்பப் பெறுகிறது
+typeof 3.14 // "number" திரும்பப் பெறுகிறது
+typeof NaN // "number" திரும்பப் பெறுகிறது
+typeof false // "boolean" திரும்பப் பெறுகிறது
+typeof [1,2,3,4] // "object" திரும்பப் பெறுகிறது
+typeof {name:'John', age:34} // "object" திரும்பப் பெறுகிறது
+typeof new Date() // "object" திரும்பப் பெறுகிறது
+typeof function () {} // "function" திரும்பப் பெறுகிறது
+typeof myCar // "undefined" திரும்பப் பெறுகிறது *
+typeof null // "object" திரும்பப் பெறுகிறது
+```
+
+JavaScript இல் பயன்படுத்தப்படும் தரவு வகைகள் மதிப்புகளை கொண்டிருப்பதன் அடிப்படையில் இரண்டு வகைகளாக வேறுபடுத்தலாம்.
+
+மதிப்புகளை கொண்டிருக்கக்கூடிய தரவு வகைகள்:
+
+* `string`
+* `number`
+* `boolean`
+* `object`
+* `function`
+
+{% hint style="info" %}
+`Object`, `Date`, `Array`, `String`, `Number`, மற்றும் `Boolean` ஆகியவை JavaScript இல் கிடைக்கும் பொருட்களின் வகைகள்.
+{% endhint %}
+
+மதிப்புகளை கொண்டிருக்க முடியாத தரவு வகைகள்:
+
+* `null`
+* `undefined`
+
+ஒரு primitive தரவு மதிப்பு என்பது கூடுதல் பண்புகள் மற்றும் முறைகள் இல்லாத ஒரு எளிய தரவு மதிப்பாகும், மேலும் இது ஒரு பொருள் அல்ல. அவை மாற்ற முடியாதவை, அதாவது அவற்றை மாற்ற முடியாது. 7 primitive தரவு வகைகள் உள்ளன:
+
+* string
+* number
+* bigint
+* boolean
+* undefined
+* symbol
+* null
+
+{% exercise %}
+`person` என்ற மாறியை அறிவித்து பின்வரும் பண்புகளைக் கொண்ட ஒரு பொருளுடன் தொடங்கவும்: `age` எண்ணாக, `name` சரமாக மற்றும் `isMarried` boolean ஆக.
+
+{% initial %}
+let person =
+
+{% solution %}
+let person = {
+ name: "Mary",
+ age: 25,
+ isMarried: false
+};
+
+{% validation %}
+assert(typeof person.age === "number" && typeof person.name === "string" && typeof person.isMarried === "boolean");
+
+{% context %}
+{% endexercise %}
diff --git a/ta/basics/variables.md b/ta/basics/variables.md
new file mode 100644
index 00000000..d1dedcfd
--- /dev/null
+++ b/ta/basics/variables.md
@@ -0,0 +1,116 @@
+---
+chapter: 2
+pageNumber: 13
+description: மாறிகள் தரவை சேமிக்கவும் வைத்திருக்கவும் பயன்படுத்தப்படுகின்றன. இது எண்கள், சரங்கள், boolean, பொருட்கள், வரிசைகள், செயல்பாடுகள் மற்றும் பலவற்றை போன்ற பல்வேறு வகையான மதிப்புகளை வைத்திருக்கலாம்.
+---
+
+# மாறிகள்
+
+நிரலாக்கத்தை உண்மையிலேயே புரிந்துகொள்வதற்கான முதல் படி இயற்கணிதத்தை திரும்பிப் பார்ப்பதாகும். நீங்கள் பள்ளியில் அதை நினைவு வைத்திருந்தால், இயற்கணிதம் பின்வருவனவற்றை போன்ற சொற்களை எழுதுவதுடன் தொடங்குகிறது.
+
+```javascript
+3 + 5 = 8
+```
+
+நீங்கள் ஒரு தெரியாத அளவை அறிமுகப்படுத்தும்போது கணக்கீடுகளை செய்யத் தொடங்குகிறீர்கள், எடுத்துக்காட்டாக, கீழே `x`:
+
+```javascript
+3 + x = 8
+```
+
+அவற்றை மாற்றி `x` ஐ தீர்மானிக்கலாம்:
+
+```javascript
+x = 8 - 3
+-> x = 5
+```
+
+நீங்கள் ஒன்றுக்கு மேற்பட்டவற்றை அறிமுகப்படுத்தும்போது உங்கள் சொற்களை மிகவும் நெகிழ்வானதாக ஆக்குகிறீர்கள் - நீங்கள் மாறிகளை பயன்படுத்துகிறீர்கள்:
+
+```javascript
+x + y = 8
+```
+
+`x` மற்றும் `y` இன் மதிப்புகளை மாற்றலாம் மற்றும் சூத்திரம் இன்னும் உண்மையாக இருக்கலாம்:
+
+```javascript
+x = 4
+y = 4
+```
+
+அல்லது
+
+```javascript
+x = 3
+y = 5
+```
+
+நிரலாக்க மொழிகளுக்கும் அதே உண்மை. நிரலாக்கத்தில், மாறிகள் மாறும் மதிப்புகளுக்கான கொள்கலன்கள். மாறிகள் அனைத்து வகையான மதிப்புகளையும் கணக்கீடுகளின் முடிவுகளையும் வைத்திருக்கலாம். மாறிகளுக்கு `name` மற்றும் `value` ஆகியவை சமமான அடையாளத்தால் `(=)` பிரிக்கப்பட்டிருக்கும். இருப்பினும், வெவ்வேறு நிரலாக்க மொழிகளுக்கு மாறி பெயர்களாக என்ன பயன்படுத்தலாம் என்பதில் அவற்றின் சொந்த வரம்புகள் மற்றும் கட்டுப்பாடுகள் இருப்பதை மனதில் கொள்வது முக்கியம். ஏனென்றால் சில வார்த்தைகள் மொழிக்குள் குறிப்பிட்ட செயல்பாடுகள் அல்லது செயல்பாட்டிற்காக ஒதுக்கப்படலாம்.
+
+Javascript இல் இது எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம். பின்வரும் குறியீடு இரண்டு மாறிகளை வரையறுக்கிறது, இரண்டையும் கூட்டுவதன் முடிவை கணக்கிடுகிறது, மற்றும் இந்த முடிவை மூன்றாவது மாறியின் மதிப்பாக வரையறுக்கிறது.
+
+```javascript
+let x = 5;
+let y = 6;
+let result = x + y;
+```
+
+மாறிகளுக்கு பெயரிடும் போது பின்பற்ற வேண்டிய சில வழிகாட்டுதல்கள் உள்ளன. அவை:
+
+- மாறி பெயர்கள் ஒரு எழுத்தில், அடிக்கோடு `(_)`, அல்லது டாலர் அடையாளத்தில் `($)` தொடங்க வேண்டும்.
+- முதல் எழுத்திற்கு பிறகு, _எழுத்துகள்_, _எண்கள்_, _அடிக்கோடுகள்_, அல்லது _டாலர்_ அடையாளங்களை பயன்படுத்தலாம்.
+- JavaScript பெரிய மற்றும் சிறிய எழுத்துகளை வேறுபடுத்துகிறது (case-sensitive), எனவே `myVariable`, `MyVariable`, மற்றும் `MYVARIABLE` அனைத்தும் தனித்தனி மாறிகள்.
+- உங்கள் குறியீட்டை படிக்க மற்றும் பராமரிக்க எளிதாக ஆக்க, அவற்றின் நோக்கத்தை துல்லியமாக பிரதிபலிக்கும் விவரணமான மாறி பெயர்களை பயன்படுத்துவது பரிந்துரைக்கப்படுகிறது.
+
+{% exercise %}
+`x` என்ற மாறியை 20 க்கு சமனாக வரையறுக்கவும்.
+
+{% initial %}
+let x =
+
+{% solution %}
+let x = 20;
+
+{% validation %}
+assert(x == 20);
+
+{% context %}
+{% endexercise %}
+**ES6 பதிப்பு**
+
+[ECMAScript 2015 அல்லது ES2015](https://262.ecma-international.org/6.0/) E6 என்றும் அழைக்கப்படுகிறது, இது 2009 க்கு பிறகு JavaScript நிரலாக்க மொழிக்கான குறிப்பிடத்தக்க புதுப்பிப்பாகும். ES6 இல் மாறிகளை அறிவிக்க மூன்று வழிகள் உள்ளன.
+
+```javascript
+var x = 5;
+const y = 'Test';
+let z = true;
+```
+
+அறிவிப்பின் வகைகள் scope ஐ பொறுத்தது. Block scope ஐப் பொறுட்படுத்தாமல் ஒரு செயல்பாடு முழுவதும் உலகளாவிய அல்லது உள்ளூர் மட்டத்தில் மாறியை வரையறுக்கும் `var` முக்கியசொல்லைப் போலல்லாமல், `let` நீங்கள் பயன்படுத்தும் block, அறிக்கை அல்லது வெளிப்பாட்டிற்கு மட்டுப்படுத்தப்பட்ட scope உடைய மாறிகளை அறிவிக்க அனுமதிக்கிறது. எடுத்துக்காட்டாக:
+
+```javascript
+function varTest(){
+ var x=1;
+ if(true){
+ var x=2; // அதே மாறி
+ console.log(x); //2
+ }
+ console.log(x); //2
+}
+
+function letTest(){
+ let x=1;
+ if(true){
+ let x=2;
+ console.log(x); // 2
+ }
+ console.log(x); // 1
+}
+```
+
+`const` மாறிகள் மாற்ற முடியாதவை, அதாவது அவற்றை மீண்டும் ஒதுக்க அனுமதிக்கப்படவில்லை.
+
+```javascript
+const x = "hi!";
+x = "bye"; // இது பிழையை ஏற்படுத்தும்
+```
diff --git a/ta/beginner-projects/digital-clock.md b/ta/beginner-projects/digital-clock.md
new file mode 100644
index 00000000..f7bf53ad
--- /dev/null
+++ b/ta/beginner-projects/digital-clock.md
@@ -0,0 +1,31 @@
+# ⏰ டிஜிட்டல் கடிகாரம் (Digital Clock)
+
+
+
+## விளக்கம் (Description)
+தற்போதைய நேரத்தை மணிநேரம் (hours), நிமிடங்கள் (minutes) மற்றும் வினாடிகளில் (seconds) காட்டும் நேரடி டிஜிட்டல் கடிகாரம்.
+
+## அம்சங்கள் (Features)
+- நிகழ்நேர (real-time) மணிநேரம், நிமிடங்கள் மற்றும் வினாடிகளைக் காட்டுகிறது
+- ஒவ்வொரு நொடியும் தானாகவே புதுப்பிக்கப்படும் (Updates)
+- AM/PM வடிவமைப்பு நிலைமாற்றம் (toggle)
+- ரெஸ்பான்சிவ் (Responsive) மற்றும் சுத்தமான UI
+
+## பயிற்சி பெற்ற கருத்துகள் (Concepts Practiced)
+- ஜாவாஸ்கிரிப்ட் `Date` பொருளுடன் வேலை செய்தல்
+- நிகழ்நேரப் புதுப்பிப்புகளுக்கு `setInterval`
+- DOM கையாளுதல் (manipulation)
+- நேர வடிவமைப்பு (Time formatting)
+
+## போனஸ் சவால் (Bonus Challenge)
+வெவ்வேறு நேர மண்டலங்கள் (time zones) அல்லது ஸ்டாப்வாட்ச் (stopwatch) அம்சத்தைச் சேர்க்கவும்.
+
+## நேரடி டெமோ (Live Demo)
+` க்குள் உள்ள உரையை மாற்ற, பட்டியலில் கூடுதல் `
` குறிச்சொல்லுக்குள் இருப்பது) DOM மரத்தில் கணுக்களாகக் கருதப்படுகின்றன என்பதை நினைவில் கொள்க - அவை ("உறுப்பு கணுக்களுக்கு (element nodes)" பதிலாக) "உரை உள்ளடக்க (text content)" கணுக்கள். + +மேலும், DOM ஆனது ஒரு **பயன்பாட்டு நிரலாக்க இடைமுகத்தையும் (Application Programming Interface - API)** வழங்குகிறது, இது கணினி _பயன்பாடுகளை_ _நிரல்ரீதியாக_ (எ.கா., ஜாவாஸ்கிரிப்ட் குறியீடு மூலம்) அதனுடன் _தொடர்பு கொள்ள_ அனுமதிக்கிறது: கூறுகளின் மரத்தை அணுகுதல் மற்றும் கையாளுதல். API என்பது பெரும்பாலும் _செயல்பாடுகள் (functions)_ மற்றும் _மாறிகள் (variables)_ ஆகியவற்றின் தொகுப்பாகும், இது ஒரு நிரலுக்கு வழிமுறைகளை வழங்க பயன்படும். DOM API உம் வேறுபட்டதல்ல: இது நீங்கள் அழைக்கக்கூடிய செயல்பாடுகள் மற்றும் (பொதுவாக பொருள் பண்புகள்) நீங்கள் காட்டப்படும் இணைய உள்ளடக்கத்தை மாற்றியமைக்க சரிசெய்யக்கூடிய மாறிகளின் குழுவாகும். ஒரு பக்கத்தை ஊடாடக்கூடியதாக மாற்றுவதற்காக இந்த செயல்பாடுகளை அழைப்பதற்கான குறியீட்டை நீங்கள் எழுதுகிறீர்கள். + +### Global மாறிகள் (Global Variables) + +Global மாறிகளின் தொகுப்பைப் பயன்படுத்துவதன் மூலம் ஜாவாஸ்கிரிப்டில் API ஐ நிரல்ரீதியாக அணுகலாம். **Global மாறிகள்** என்பவை "உலகளாவிய (globally)" ஸ்கோப் செய்யப்பட்ட மாறிகள்: அவை நிரலில் எங்கும் கிடைக்கின்றன (ஒரு குறிப்பிட்ட செயல்பாட்டிற்குள் மட்டும் அல்ல). + +
ஒரு முக்கியமான நிரலாக்க பாணி விதி global மாறிகளின் பயன்பாட்டைக் **குறைப்பது**. நீங்களே அதிக புதிய global களை உருவாக்குவதைத் தவிர்க்க முயற்சிக்கவும்!
+ +ஜாவாஸ்கிரிப்டில் உள்ள Global மாறிகள் எப்போதும் அவற்றின் மதிப்புகளாக முறைகளைக் கொண்ட _பொருள்கள் (Objects)_ ஆகும். எடுத்துக்காட்டாக, ஜாவாஸ்கிரிப்ட் மொழியே [**`Math`**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math) பொருளை வழங்குகிறது, இதில் பல செயல்பாட்டு பண்புகள் அடங்கும் (எ.கா., `sqrt()`, `floor()` போன்றவை). + +```js +console.log(typeof Math); //=> 'object' +console.log(typeof Math.sqrt); //=> 'function' +console.log(Math.sqrt(25)); //=> 5 +``` + +- உண்மையில், `console` பொருள் ஜாவாஸ்கிரிப்ட் இயக்கநேரத்தால் (runtime) (உலாவியிலோ அல்லது Node.js இற்குள்ளோ) வழங்கப்படும் _மற்றொரு_ global மாறியாகும்! + +_இணைய உலாவியும்_ நீங்கள் பயன்படுத்தக்கூடிய பல global மாறிகளை வழங்குகிறது. எடுத்துக்காட்டாக [**`window`**](https://developer.mozilla.org/en-US/docs/Web/API/Window) என்பது உலாவியையே குறிக்கும் ஒரு global பொருளாகும். உலாவியைப் பற்றிய தகவல்களைப் பெற இந்தப் பொருளைப் பயன்படுத்தலாம்: + +```js +/* எடுத்துக்காட்டு பண்புகள் */ +let width = window.innerWidth; //viewport அகலம் +let height = window.innerHeight; //viewport உயரம் +var url = window.location.href; //இந்தப் பக்கத்திற்கான url + +/* எடுத்துக்காட்டு செயல்பாடுகள் */ +window.alert("Boo!"); //popup எச்சரிக்கையைக் காட்டு. இதைப் பயன்படுத்த வேண்டாம். +window.scrollTo(0, 1000); //ஒரு நிலைக்கு உருட்டவும் +window.setTimeout(callback, 1000); //ஒரு தாமதத்திற்குப் பிறகு callback ஐ இயக்கவும் +window.setInterval(callback, 1000); //இடைவெளிக்குப் பிறகு மீண்டும் மீண்டும் callback ஐ இயக்கவும் +``` + +முழுமைக்காக இந்த எடுத்துக்காட்டுகள் சேர்க்கப்பட்டாலும், பெரும்பாலான `window` செயல்பாடுகள் அரிதாகவே பயன்படுத்தப்படுகின்றன, மேலும் அவற்றைத் தவிர்க்க வேண்டும். `window.alert()` செயல்பாட்டைக் கொண்ட பாப்அப்கள் நேர்த்தியற்றவை, பயனரின் செயல்களுக்கு இடையூறு விளைவிப்பவை மற்றும் மோசமான பயனர் அனுபவத்தை உருவாக்குகின்றன - அதற்குப் பதிலாக நீங்கள் in-window எச்சரிக்கை விருப்பங்களைப் பயன்படுத்த வேண்டும் (அதாவது `class="alert-class" ` ஐக் காண்பிப்பது போன்றவை). `scrollTo()` போன்ற உலாவி கட்டுப்பாட்டு செயல்பாடுகள் தரமற்றவை மற்றும் அமைப்புகள் மற்றும் இயங்குதளங்களில் கடுமையாக மாறுபடும். `window` செயல்பாடுகளைப் பயன்படுத்தும் போது எச்சரிக்கையுடன் தொடரவும்!
diff --git a/ta/document-object-model/dom-manipulation.md b/ta/document-object-model/dom-manipulation.md new file mode 100644 index 00000000..9a65be6c --- /dev/null +++ b/ta/document-object-model/dom-manipulation.md @@ -0,0 +1,222 @@ +--- +chapter: 28 +description: ஜாவாஸ்கிரிப்டில் DOM கையாளுதலைப் (DOM Manipulation) புரிந்துகொள்வது. +--- + +## DOM கையாளுதல் (DOM Manipulation) + +`window` உலாவியைக் குறிக்கும் போது, **DOM** 자체가 [**`document`**](https://developer.mozilla.org/en-US/docs/Web/API/Document) உலகளாவிய பொருளால் (global object) குறிக்கப்படுகிறது—`document` _என்பது_ DOM (உலாவியில் காட்டப்படும் _தற்போதைய_ HTML). உலாவியில் காட்டப்படும் உள்ளடக்கத்தைக் கையாளுவதற்காக இந்தப் பொருளின் பண்புகளை (properties) அணுகி, முறைகளை (methods) அழைக்கிறீர்கள்! + +### HTML கூறுகளைக் குறிப்பிடுதல் (Referencing HTML Elements) + +ஒரு பக்கத்தில் உள்ள DOM கூறுகளைக் கையாள, நீங்கள் மாற்ற விரும்பும் உறுப்பிற்கான ஒரு _குறிப்பை (reference)_ முதலில் பெற வேண்டும்—அதாவது, அந்த உறுப்பைக் குறிக்கும் ஒரு மாறி (variable) உங்களுக்குத் தேவை. `document` "தேர்வி (selector)" செயல்பாடுகளில் ஒன்றைப் பயன்படுத்துவதன் மூலம் இந்த மாறி குறிப்புகளைப் பெறலாம்: + +```js +// id="foo" கொண்ட உறுப்பு +let fooElem = document.getElementById("foo"); + +// class="row" கொண்ட உறுப்புகள் +let rowElems = document.getElementsByClassName("row"); //பன்மை (plural) என்பதைக் கவனியுங்கள்! + +//**முக்கியமானது**: இந்தப் பண்புகளை அமைப்பது `.html` மூலக் குறியீடு கோப்பை (source code file) மாற்றாது! மாறாக, அவை _காட்டப்படும் DOM கூறுகளை_ மட்டுமே மாற்றுகின்றன (நினைத்துப் பாருங்கள்: உள்ளடக்கங்கள் கோப்பில் இல்லாமல் கணினியின் நினைவகத்தில் சேமிக்கப்படுகின்றன). நீங்கள் பக்கத்தைப் புதுப்பித்தால் (refresh), DOM ஐ மாற்றும் ஸ்கிரிப்ட் ஏற்றப்படாவிட்டால் தவிர, உள்ளடக்கம் `.html` மூலக் குறியீடு கோப்பு குறிப்பிடும் விதத்திற்குத் திரும்பும். பக்கத்தில் காட்டப்படுவது ஜாவாஸ்கிரிப்ட் மாற்றங்கள் சேர்க்கப்பட்ட HTML ஆகும்.
+ +#### உள்ளடக்கத்தை மாற்றுதல் (Changing Content) + +DOM உறுப்பின் (எ.கா., தொடக்க மற்றும் இறுதி குறிச்சொற்களுக்கு இடையே உள்ள விஷயங்கள்) **உள்ளடக்கத்தை** அணுகவும் மாற்றவும் நீங்கள் ஜாவாஸ்கிரிப்டைப் பயன்படுத்தலாம்: + +```js +// முதல் உறுப்பிற்கான குறிப்பைப் பெறவும்
+let elem = document.querySelector("p");
+
+console.log(elem); //விளக்குவதற்கு
+
+let text = elem.textContent; //உறுப்பின் உரை உள்ளடக்கம்
+elem.textContent = "இது வேறுபட்ட உள்ளடக்கம்!"; //உள்ளடக்கத்தை மாற்று
+
+let html = elem.innerHTML; //HTML உள்ளிட்ட உள்ளடக்கம்
+elem.innerHTML = "இது வேறுபட்ட உள்ளடக்கம்!"; //HTML ஆக விளக்கப்படுகிறது
+```
+
+உறுப்பின் `textContent` பண்பு _அனைத்து_ உள்ளடக்கத்தையும் குறிக்கிறது, ஆனால் "வெற்று உரை" என்று கருதப்படுவது இது ஒரு "பாதுகாப்பான" பண்பு என்று பொருள்படும்: HTML குறியீட்டைக் கொண்ட சரங்களை நீங்கள் ஒதுக்கலாம் (எ.கா., `Hello`), ஆனால் அந்தக் குறியீடு தப்பிக்கப்பட்டு (escaped) HTML ஆக விளக்கப்படாது (மாறாக `<` மற்றும் `>` ஆகியவை நீங்கள் [HTML entities](https://www.w3schools.com/html/html_entities.asp) ஐப் பயன்படுத்தியது போல் எழுதப்படும்). மறுபுறம், `.innerHTML` பண்பு "பாதுகாப்பற்றது": நீங்கள் ஒதுக்கும் சரத்தில் சேர்க்கப்பட்டுள்ள எந்த HTML உம் DOM கூறுகளாக மாற்றப்படும். உள்ளடக்கம் நம்பகமான மூலத்திலிருந்து வந்ததா என்பதை நீங்கள் உறுதியாக நம்பாவிட்டால் தவிர, இது பயன்படுத்த சிறந்த பண்பு அல்ல.
+
+- `` அல்லது `` போன்ற _உள்ளமை (inline)_ கூறுகளைச் சேர்க்க `innerHTML` பண்பு முதன்மையாகப் பயன்படுத்தப்பட வேண்டும். மிகவும் சிக்கலான HTML உள்ளடக்கத்திற்கு, வெளிப்படையாக புதிய கூறுகளை உருவாக்குவது தூய்மையான குறியீடாகும் (கவலைகளின் பிரிப்பு!) - விவரங்களுக்கு கீழே காண்க.
+
+- ஒரு உறுப்பின் உள்ளடக்கத்தை வெற்றுச் சரமாக (`''`) அமைப்பதன் மூலம் அதை "அழிக்கலாம் (clear)":
+
+ ```js
+ let alertElem = document.querySelector(".alert");
+ alertElem.textContent = ""; //இனி எச்சரிக்கை இல்லை!
+ ```
+
+#### பண்புக்கூறுகளை மாற்றுதல் (Changing Attributes)
+
+நீங்கள் தனிப்பட்ட கூறுகளின் **பண்புக்கூறுகளையும் (attributes)** மாற்றலாம். HTML விவரக்குறிப்பில் வரையறுக்கப்பட்ட ஒவ்வொரு பண்புக்கூறும் பொதுவாக உறுப்பு பொருளின் ஒரு _பண்பாக (property)_ வெளிப்படுத்தப்படுகிறது:
+
+```js
+// `#picture` உறுப்பிற்கான குறிப்பைப் பெறவும்
+let imgElem = document.querySelector("#picture");
+
+// பண்புக்கூறை அணுகவும்
+console.log(imgElem.src); //படத்தின் மூலத்தைப் பதிவு செய்கிறது
+
+// பண்புக்கூறை மாற்றவும்
+imgElem.src = "my-picture.png";
+```
+
+ நீங்கள் `element.class` அல்லது `element.style` பண்புக்கூறுகளை நேரடியாக இந்த வழியில் அணுக **முடியாது**; உறுப்பின் CSS ஐ மாற்றுவது பற்றிய விவரங்களுக்கு கீழே காண்க. பொதுவாக, குறிப்பிட்ட நடை (style) பண்புகளை மாற்றுவதற்குப் பதிலாக, உறுப்பின் வகுப்பை (class) மாற்றுவதன் மூலம் உறுப்பு CSS ஐ மாற்ற வேண்டும். First paragraph Second paragraph First paragraph ஐ உருவாக்கவும் (இன்னும் மரத்தில் இல்லை)
+let newP = document.createElement("p");
+newP.textContent = "நான் புதியவன்!";
+
+// உரை உள்ளடக்கத்தின் கணுவை மட்டும் உருவாக்கவும் (HTML உறுப்பு அல்ல, உரை மட்டுமே)
+let newText = document.createTextNode("நான் வெற்று");
+
+let main = document.querySelector("main");
+main.appendChild(newP); //உறுப்பை உள்ளே சேர்க்கவும் (முடிவில்)
+main.appendChild(newText); //உரையை உள்ளே சேர்க்கவும், க்குப் பிறகு
+
+// உறுப்புக்கு முன் அநாமதேய புதிய கணுவைச் சேர்க்கவும். அளவுருக்கள்: (புதியது, பழையது)
+main.insertBefore(document.createTextNode("First!"), newP);
+
+// கணுவை மாற்றவும். அளவுருக்கள்: (புதியது, பழையது)
+main.replaceChild(document.createTextNode("boo"), newText);
+
+// கணுவை அகற்றவும்
+main.removeChild(main.querySelector("p"));
+```
+
+`innerHTML` பண்பை மாற்றுவதை விட `appendChild()` முறை ஒரு தூய்மையான அணுகுமுறையாகக் கருதப்படுகிறது, ஏனெனில் இது முன்பு இருந்ததை அழிக்காமல் DOM மரத்தை சரிசெய்ய உங்களை அனுமதிக்கிறது. ஒரு _தொகுதி (block)_ உறுப்பை உருவாக்க `document.createElement()` ஐப் பயன்படுத்துவது ஒரு பொதுவான நடைமுறையாகும், பின்னர் அந்த உறுப்பின் `innerHTML` ஐ அதன் உள்ளடக்கத்திற்கு (இது _உள்ளமை (inline)_ உறுப்புகளை உள்ளடக்கியிருக்கலாம்) அமைத்து, பின்னர் புதிய தொகுதி உறுப்பை மரத்தின் விரும்பிய இடத்தில் சேர்க்க `appendChild` ஐப் பயன்படுத்தவும்.
+
+### அணுகல்தன்மை (Accessibility)
+
+எப்போதெல்லாம் நீங்கள் ஒரு புதிய தொழில்நுட்பத்தைக் கற்றுக்கொள்கிறீர்களோ, அப்போது நீங்கள் கேட்க வேண்டும்: **இது அணுகல்தன்மையை எவ்வாறு பாதிக்கிறது?** ஜாவாஸ்கிரிப்ட் குறியீடு காட்டப்படும் DOM ஐ மாற்றுவதன் மூலம், ஒரு பக்கத்தின் உள்ளடக்கம் ஸ்கிரீன் ரீடரால் படிக்கப்பட்ட _பிறகு_ மாற வாய்ப்புள்ளது. மற்றும் பார்வை கொண்ட ஒரு பயனர் மாற்றத்தை பார்வை மூலம் காண முடியும் என்றாலும், நீங்கள் சொல்லாத வரை பக்கத்தில் ஏதோ வித்தியாசமாக இருப்பதை அறிய ஸ்கிரீன் ரீடருக்கு எந்த வழியும் இல்லை.
+
+ஒரு உறுப்பை [ARIA லைவ் பிராந்தியமாக (ARIA Live Region)](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions) மாற்றுவதன் மூலம், ஒரு பக்கத்தில் உள்ள ஒரு உறுப்பு _எதிர்காலத்தில்_ அதன் உள்ளடக்கத்தை மாற்றக்கூடும் என்பதை ஸ்கிரீன் ரீடர்களுக்கு நீங்கள் தெரிவிக்கலாம். லைவ் பிராந்தியங்கள் உதவி தொழில்நுட்பங்களால் "கண்காணிக்கப்படுகின்றன", மேலும் உள்ளடக்கம் மாறும்போதெல்லாம் அவை புதிய உள்ளடக்கத்தை முதல் முறையாகப் படிப்பது போல வாசகரிடம் பேசும்.
+
+`aria-live` பண்புக்கூறை வழங்குவதன் மூலம் ஒரு உறுப்பை லைவ் பிராந்தியமாக மாற்றுகிறீர்கள்:
+
+```html
+ `onclick` போன்ற பண்புக்கூறுகளைப் பயன்படுத்தி உங்கள் HTML இல் ஜாவாஸ்கிரிப்டைக் கலக்க வேண்டாம். உங்கள் குறியீட்டை ஒழுங்கமைத்து வைக்கவும், கவலைகளின் தூய்மையான பிரிப்பை (clean separation of concerns) உறுதிப்படுத்தவும் எப்போதும் ஒரு தனி ஜாவாஸ்கிரிப்ட் கோப்பில் நிகழ்வு கேட்பவர்களைப் பதிவு செய்யவும். ஹேண்ட்லரைச் செயல்படுத்த என்னைக் கிளிக் செய்யவும். ஒரு கொண்ட ஒரு பத்தி. Location: ${data.name}, ${data.sys.country} Temperature: ${temperature} °C Weather: ${data.weather[0].description} Failed to fetch weather data.
+
+
+எடுத்துக்காட்டு:
+
+```js
+function abc() {
+ return 5;
+}
+```
+
+
+**செயல்பாட்டுக் கோவை (Function expression)**:
+
+
+
+எடுத்துக்காட்டு:
+
+```js
+var a = function abc() {
+ return 5;
+}
+```
+
+
+### 2.8. ஜாவாஸ்கிரிப்டில் அம்பு செயல்பாடுகள் (arrow functions) என்ன?
+
+**பதில்**: ஜாவாஸ்கிரிப்டில் செயல்பாடுகளை எழுதுவதற்கு அம்பு செயல்பாடுகள் (arrow functions) ஒரு குறுகிய மற்றும் சுருக்கமான வழியாகும். அம்பு செயல்பாட்டின் பொதுவான தொடரியல் (syntax) கீழே உள்ளபடி:
+```js
+const helloWorld = () => {
+ console.log("hello world!");
+};
+```
+
+### 2.9. மதிப்பால் கடந்து (Passed by value) மற்றும் குறிப்பால் கடந்து (passed by reference) :
+
+**பதில்:**
+- மதிப்பால் கடந்து (Passed By Values) என்பவை பழமையான தரவு வகைகள் (Primitive Data Types) ஆகும்.
+பின்வரும் உதாரணத்தைக் கவனியுங்கள்:
+
+இங்கே, `a=432` என்பது பழமையான தரவு வகையாகும், அதாவது ஆபரேட்டரால் ஒதுக்கப்பட்ட மதிப்பைக் (assigned value) கொண்ட எண் (number) வகை. `var b=a` குறியீடு செயல்படுத்தப்படும்போது, `var a` இன் மதிப்பானது `var b` க்கு நினைவகத்தில் (memory) புதிய இட ஒதுக்கீட்டை வழங்குவதன் மூலம் புதிய முகவரியைத் (address) திருப்பித் தருகிறது, இதனால் 'var b' புதிய இடத்தில் இயக்கப்படும்.
+
+எடுத்துக்காட்டு:
+```js
+var a = 432;
+var b = a;
+```
+
+
+Passed_by_values_new
+
+- குறிப்புகளால் கடந்து (Passed by References) என்பவை பழமையானவை அல்லாத தரவு வகைகள் (Non-primitive Data Types).
+
+பின்வரும் உதாரணத்தைக் கவனியுங்கள்:
+
+1 வது மாறி பொருளின் (variable object) குறிப்பு (reference), அதாவது `var obj`, ஒதுக்கப்பட்ட ஆபரேட்டரின் (assigned operator) உதவியுடன் மற்றொரு மாறியின் இருப்பிடத்தின் வழியாக அனுப்பப்படுகிறது, அதாவது `var obj2`.
+
+எடுத்துக்காட்டு:
+```js
+var obj = { name: "Raj", surname: "Sharma" };
+var obj2 = obj;
+```
+
+# 3. தரவு வகைகள் மற்றும் ஆபரேட்டர் (Data Types and Operator)
+
+### 3.1. ஜாவாஸ்கிரிப்டில் உள்ள வெவ்வேறு தரவு வகைகள் (data types) யாவை?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் உள்ள வெவ்வேறு தரவு வகைகள் பின்வருமாறு:
+
+1. **பழமையான வகைகள் (Primitive types)**
+
+ - `சரம் (String)` - இது எழுத்துகளின் (characters) தொடரைக் குறிக்கிறது மற்றும் மேற்கோள்களுடன் (quotes) எழுதப்பட்டுள்ளது. ஒற்றை (single) அல்லது இரட்டை (double) மேற்கோளைப் பயன்படுத்தி ஒரு சரத்தைக் குறிப்பிடலாம்.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var str = "Vivek Singh Bisht"; //using double quotes
+ var str2 = "John Doe"; //using single quotes
+ ```
+
+ - `எண் (Number)` - இது ஒரு எண்ணைக் குறிக்கிறது மற்றும் தசமங்களுடன் (decimals) அல்லது தசமங்கள் இல்லாமல் எழுதப்படலாம்.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var x = 3; //without decimal
+ var y = 3.6; //with decimal
+ ```
+
+ - `BigInt` - Number தரவு வகையின் வரம்பிற்கு (limitation) மேலான எண்களைச் சேமிக்க இந்தத் தரவு வகை பயன்படுத்தப்படுகிறது. இது பெரிய முழு எண்களைச் (large integers) சேமிக்க முடியும் மற்றும் ஒரு முழு எண் லிட்டரலுடன் (integer literal) "n" ஐச் சேர்ப்பதன் மூலம் குறிக்கப்படுகிறது.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var bigInteger = 234567890123456789012345678901234567890;
+ ```
+
+ - `பூலியன் (Boolean)` - இது ஒரு தர்க்கரீதியான உட்பொருளைக் (logical entity) குறிக்கிறது மற்றும் இரண்டு மதிப்புகளை மட்டுமே கொண்டிருக்க முடியும்: true அல்லது false. நிபந்தனை சோதனைக்குச் (conditional testing) பூலியன்கள் பொதுவாகப் பயன்படுத்தப்படுகின்றன.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var a = 2;
+ var b = 3;
+ var c = 2;
+ (a == b)(
+ // returns false
+ a == c
+ ); //returns true
+ ```
+
+ - `வரையறுக்கப்படாதது (Undefined)` - ஒரு மாறி அறிவிக்கப்பட்டு ஆனால் ஒதுக்கப்படாமல் இருக்கும் போது, அது வரையறுக்கப்படாத (undefined) மதிப்பைக் கொண்டுள்ளது மற்றும் அதன் வகையும் வரையறுக்கப்படவில்லை.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var x; // value of x is undefined
+ var y = undefined; // we can also set the value of a variable as undefined
+ ```
+
+ - `வெற்று (Null)` - இது இல்லாத (non-existent) அல்லது தவறான மதிப்பைக் குறிக்கிறது.
+
+ **எடுத்துக்காட்டு (Example)** :
+
+ ```js
+ var z = null;
+ ```
+
+ - `சின்னம் (Symbol)` - இது ஜாவாஸ்கிரிப்டின் ES6 பதிப்பில் அறிமுகப்படுத்தப்பட்ட ஒரு புதிய தரவு வகையாகும். அநாமதேய (anonymous) மற்றும் தனித்துவமான (unique) மதிப்பைச் சேமிக்க இது பயன்படுகிறது.
+
+ **எடுத்துக்காட்டு:**
+
+ ```js
+ var symbol1 = Symbol('symbol');
+ typeof of primitive types :
+ typeof "John Doe" // Returns "string"
+ typeof 3.14 // Returns "number"
+ typeof true // Returns "boolean"
+ typeof 234567890123456789012345678901234567890n // Returns bigint
+ typeof undefined // Returns "undefined"
+ typeof null // Returns "object" (kind of a bug in JavaScript)
+ typeof Symbol('symbol') // Returns Symbol 2. Non-primitive types
+ ```
+
+பழமையான தரவு வகைகள் (Primitive data types) ஒற்றை மதிப்பை மட்டுமே சேமிக்க முடியும். பல மற்றும் சிக்கலான மதிப்புகளைச் சேமிக்க, பழமையானவை அல்லாத (non-primitive) தரவு வகைகள் பயன்படுத்தப்படுகின்றன.
+
+2. **பழமையானவை அல்லாத வகைகள் (Non-Primitive types)**
+
+ - `பொருள் (Object)` - தரவுகளின் தொகுப்பைச் (collection of data) சேமிக்கப் பயன்படுகிறது.
+
+ **எடுத்துக்காட்டு (Example)**:
+
+ ```js
+ // Collection of data in key-value pairs
+ var obj1 = {
+ x: 43,
+ y: "Hello world!",
+ z: function () {
+ return this.x;
+ },
+ };
+ ```
+
+ - `வரிசை (Array)`
+
+ **எடுத்துக்காட்டு:**
+
+ ```js
+ // Collection of data as an ordered list
+
+ var array1 = [5, "Hello", true, 4.1];
+ ```
+
+> **குறிப்பு- பழமையான தரவு வகை (primitive data type) அல்லாத எந்தத் தரவு வகையும், ஜாவாஸ்கிரிப்டில் `பொருள் (Object)` வகை என்பதை நினைவில் கொள்வது அவசியம்.**
+
+### 3.2 `==` மற்றும் `===` ஆபரேட்டர்களுக்கு (operators) இடையிலான வேறுபாடு.
+
+**பதில்:**
+இரண்டும் ஒப்பீட்டு ஆபரேட்டர்கள் (comparison operators). இரண்டு ஆபரேட்டர்களுக்கும் உள்ள வித்தியாசம் என்னவென்றால், `==` என்பது மதிப்புகளை (values) ஒப்பிடப் பயன்படுத்தப்படுகிறது, அதே சமயம் `===` என்பது மதிப்புகள் மற்றும் வகைகள் (types) இரண்டையும் ஒப்பிடப் பயன்படுத்தப்படுகிறது.
+
+**எடுத்துக்காட்டு**:
+
+```js
+var x = 2;
+var y = "2";
+(x == y)(
+ // Returns true since the value of both x and y is the same
+ x === y
+); // Returns false since the typeof x is "number" and typeof y is "string"
+```
+
+### 3.3. ஜாவாஸ்கிரிப்டில் NaN பண்பு (property) என்ன?
+
+**பதில்:**
+`NaN` பண்பு “**Not-a-Number (எண் அல்லாதது)**” மதிப்பைக் குறிக்கிறது. இது சட்டப்பூர்வமான எண் அல்லாத மதிப்பைக் (value that is not a legal number) குறிக்கிறது.
+
+`NaN` இன் `typeof` ஒரு எண்ணைத் (Number) திருப்பித் தரும்.
+
+ஒரு மதிப்பு `NaN` என்பதைச் சரிபார்க்க, நாம் `isNaN()` செயல்பாட்டைப் பயன்படுத்துகிறோம்,
+
+> குறிப்பு- `isNaN()` செயல்பாடு கொடுக்கப்பட்ட மதிப்பை Number வகைக்கு மாற்றுகிறது, பின்னர் NaN க்குச் சமம் (equates) செய்கிறது.
+
+**எடுத்துக்காட்டு:**
+
+```js
+isNaN("Hello"); // Returns true
+isNaN(345); // Returns false
+isNaN("1"); // Returns false, since '1' is converted to Number type which results in 0 ( a number)
+isNaN(true); // Returns false, since true converted to Number type results in 1 ( a number)
+isNaN(false); // Returns false
+isNaN(undefined); // Returns true
+```
+
+### 3.4. ஒரு குறிப்பிட்ட குறியீட்டிலிருந்து (index) ஒரு எழுத்தை (character) மீட்டெடுக்க (retrieve) எந்த முறை (method) பயன்படுத்தப்படுகிறது?
+
+**பதில்:**
+ஜாவாஸ்கிரிப்ட் சரத்தின் (string) `charAt()` செயல்பாடு (function), வழங்கப்பட்ட குறியீட்டில் (index) ஒரு சார் உறுப்பைக் (char element) கண்டறியும். குறியீட்டு எண் `0` இல் தொடங்கி `n-1` வரை தொடர்கிறது, இங்கே `n` என்பது சரத்தின் நீளம் (string length). குறியீட்டு மதிப்பு நேர்மறையாக (positive), அதிகமாக அல்லது சரத்தின் நீளத்திற்குச் சமமாக இருக்க வேண்டும்.
+
+# 4. சில முக்கியமான கருத்துக்கள் (Some important concepts)
+
+### 4.1. ஜாவாஸ்கிரிப்டில் ஹொயிஸ்டிங் (Hoisting) என்றால் என்ன?
+
+**பதில்:**
+ஹொயிஸ்டிங் என்பது ஒரு ஜாவாஸ்கிரிப்ட் பொறிமுறையாகும் (mechanism), அங்கு மாறிகள் மற்றும் செயல்பாட்டு அறிவிப்புகள் (function declarations) குறியீடு செயல்படுத்துவதற்கு முன்பு அவற்றின் ஸ்கோப்பின் உச்சிக்கு நகர்த்தப்படுகின்றன. தவிர்க்க முடியாமல், செயல்பாடுகள் மற்றும் மாறிகள் எங்கு அறிவிக்கப்பட்டாலும், அவற்றின் ஸ்கோப் உலகளாவியதாக இருந்தாலும் அல்லது உள்ளூர் (global or local) ஆக இருந்தாலும் அவற்றின் ஸ்கோப்பின் உச்சிக்கு அவை நகர்த்தப்படும் என்பதை இது குறிக்கிறது.
+
+**எடுத்துக்காட்டு 1:** மாறியின் ஹொயிஸ்டிங் (Hoisting of variable)
+
+ ```js
+hoistedVariable = 3;
+console.log(hoistedVariable); // outputs 3 even when the variable is declared after it is initialized
+var hoistedVariable;
+```
+
+**எடுத்துக்காட்டு 2:** செயல்பாட்டின் ஹொயிஸ்டிங் (Hoisting of function)
+```js
+hoistedFunction(); // Outputs " Hello world! " even when the function is declared after calling
+
+function hoistedFunction(){
+ console.log(" Hello world! ");
+}
+```
+**எடுத்துக்காட்டு 3:** செயல்பாட்டுக் கோவையின் ஹொயிஸ்டிங் (Hoisting of function expression)
+```js
+// Hoisting takes place in the local scope as well
+function doSomething(){
+ x = 33;
+ console.log(x);
+ var x;
+}
+doSomething(); // Outputs 33 since the local variable “x” is hoisted inside the local scope
+
+/* Note - Variable initializations are not hoisted, only variable declarations are hoisted: */
+var x;
+console.log(x); // Outputs "undefined" since the initialization of "x" is not hoisted
+x = 23;
+
+/* Note - To avoid hoisting, you can run javascript in strict mode by using “use strict” on top of the code: */
+"use strict";
+x = 23; // Gives an error since 'x' is not declared
+var x;
+```
+### 4.2. ஜாவாஸ்கிரிப்டில் "பிழைத்திருத்தி (debugger)" என்ற வார்த்தையை நாம் ஏன் பயன்படுத்துகிறோம்?
+
+**பதில்:** குறியீட்டில் பிரேக் பாயிண்டுகளை (breakpoints) உருவாக்க `debugger` முக்கியச் சொல் பயன்படுத்தப்படுகிறது. குறியீட்டில் உள்ள பிழைத்திருத்தி (debugger) முக்கியச்சொல்லை (keyword) உலாவி (browser) கண்டால், அது குறியீட்டைச் செயல்படுத்துவதை நிறுத்தி, உலாவியின் பிழைத்திருத்தக் கருவியைத் (debugging tool) திறக்கும்.
+
+### 4.3. ஜாவாஸ்கிரிப்டில் கரியிங் (currying) என்றால் என்ன?
+
+**பதில்:** கரியிங் என்பது `n` வாதங்களின் (arguments) செயல்பாட்டை (function) ஒன்று அல்லது குறைவான வாதங்களின் `n` செயல்பாடுகளாக மாற்றுவதற்கான மேம்பட்ட நுட்பமாகும்.
+
+*கரியிங் செய்யப்பட்ட செயல்பாட்டின் எடுத்துக்காட்டு (Example of a curried function):*
+``` js
+function add (a) {
+ return function(b){
+ return a + b;
+ }
+}
+
+add(3)(4)
+```
+எடுத்துக்காட்டாக, எங்களிடம் ஒரு செயல்பாடு `f(a,b)` இருந்தால், கரியிங் செய்த பிறகு உள்ள செயல்பாடு `f(a)(b)` என மாற்றப்படும்.
+
+கரியிங் நுட்பத்தைப் பயன்படுத்துவதன் மூலம், ஒரு செயல்பாட்டின் செயல்பாட்டை (functionality) நாங்கள் மாற்றுவதில்லை, அது எவ்வாறு செயல்படுத்தப்படுகிறது (invoked) என்பதை மட்டுமே மாற்றுகிறோம்.
+
+செயலில் உள்ள கரியிங்கைப் (currying) பார்ப்போம்:
+
+``` js
+function multiply(a,b){
+ return a*b;
+}
+
+function currying(fn){
+ return function(a){
+ return function(b){
+ return fn(a,b);
+ }
+ }
+}
+
+var curriedMultiply = currying(multiply);
+
+multiply(4, 3); // Returns 12
+
+curriedMultiply(4)(3); // Also returns 12
+```
+
+
+மேலே உள்ள குறியீட்டில் ஒருவர் பார்க்கிறபடி, நாங்கள் `function multiply(a,b)` ஐ `curriedMultiply` என்ற செயல்பாட்டிற்கு மாற்றியுள்ளோம், இது ஒரு நேரத்தில் ஒரு அளவுருவை (parameter) எடுக்கும்.
+
+### 4.4. வெளிப்புற ஜாவாஸ்கிரிப்டைப் (External JavaScript) பயன்படுத்துவதன் சில நன்மைகள் என்ன?
+
+**பதில்:** எக்ஸ்டர்னல் ஜாவாஸ்கிரிப்ட் (External JavaScript) என்பது ஜாவாஸ்கிரிப்ட் குறியீடு (ஸ்கிரிப்ட்) `extension.js` உடன் தனி கோப்பில் எழுதப்பட்டுள்ளது, பின்னர் குறியீடு வைக்கப்பட வேண்டிய HTML கோப்பின் `` அல்லது `` உறுப்புக்குள் அந்தக் கோப்பை இணைக்கிறோம்.
+
+வெளிப்புற ஜாவாஸ்கிரிப்டின் (external javascript) சில நன்மைகள்:
+
+- இது வலை வடிவமைப்பாளர்கள் (web designers) மற்றும் டெவலப்பர்களை HTML மற்றும் ஜாவாஸ்கிரிப்ட் கோப்புகளில் ஒத்துழைக்க அனுமதிக்கிறது.
+- நாம் குறியீட்டை மீண்டும் பயன்படுத்தலாம்.
+- வெளிப்புற ஜாவாஸ்கிரிப்டில் குறியீடு வாசிப்புத்திறன் (Code readability) எளிமையானது.
+
+### 4.5. ஜாவாஸ்கிரிப்டில் க்ளோஷர் (closure) என்றால் என்ன?
+
+**பதில்:** க்ளோஷர் (closure) என்பது வெளிப்புறச் செயல்பாடு திரும்பிய பிறகும் அதன் வெளிப்புறச் செயல்பாட்டு ஸ்கோப்பிற்கான (outer function scope) அணுகலைக் கொண்ட ஒரு செயல்பாடாகும். இதன் பொருள் ஒரு க்ளோஷர் அதன் வெளிப்புறச் செயல்பாட்டின் மாறிகள் (variables) மற்றும் வாதங்களை (arguments) செயல்பாடு முடிந்த பின்னரும் நினைவில் வைத்து அணுக முடியும்.
+
+சுருக்கமாக- க்ளோஷர் என்பது அதன் வெளிப்புற (இணைக்கும்) செயல்பாட்டு ஸ்கோப்பிலிருந்து மாறிகளுக்கான அணுகலைக் கொண்ட ஒரு செயல்பாடாகும், வெளிப்புறச் செயல்பாடு செயல்படுத்துவதை முடித்த பிறகும்.
+
+### 4.6. ஜாவாஸ்கிரிப்டில் DOM என்றால் என்ன?
+
+**பதில்:** ஆவணப் பொருள் மாதிரி (Document Object Model - DOM) என்பது HTML மற்றும் XML ஆவணங்களுக்கான நிரலாக்க இடைமுகமாகும் (programming interface). இது பக்கத்தைக் குறிக்கிறது, இதனால் நிரல்கள் ஆவணத்தின் அமைப்பு, நடை மற்றும் உள்ளடக்கத்தை மாற்ற முடியும். DOM ஆனது ஆவணத்தை முனைகள் (nodes) மற்றும் பொருள்களாகக் (objects) குறிக்கிறது. இதன் மூலம், நிரலாக்க மொழிகள் பக்கத்துடன் இணைக்க முடியும்.
+
+### 4.7. நிகழ்வு பிரதிநிதித்துவம் (event delegation) என்றால் என்ன?
+
+**பதில்:** நிகழ்வு பிரதிநிதித்துவம் (Event delegation) என்பது நிகழ்வுகளைக் (events) கேட்பதற்கான (listening) ஒரு நுட்பமாகும், அங்கு ஒரு பெற்றோர் உறுப்பை (parent element) உள்ளே நடக்கும் அனைத்து நிகழ்வுகளுக்கும் கேட்பவராக (listener) நியமிக்கிறீர்கள். நிகழ்வுகள் பெற்றோர் உறுப்பின் கால்பேக் (callback) செயல்பாட்டின் மூலம் கையாளப்படுகின்றன.
+
+### 4.8. ஜாவாஸ்கிரிப்டில் AJAX கோரிக்கையை (AJAX request) எவ்வாறு செய்யலாம்?
+
+**பதில்:** [AJAX](../miscellaneous/api-ajax.md) என்பது Asynchronous JavaScript and XML ஐக் குறிக்கிறது. ஒத்திசைவற்ற (asynchronous) வலைப் பயன்பாடுகளை உருவாக்க கிளையன்ட் பக்கத்தில் (client-side) பல வலைத் தொழில்நுட்பங்களைப் பயன்படுத்தும் வலை மேம்பாட்டு நுட்பங்களின் (web development techniques) தொகுப்பாகும். AJAX உடன், இணையப் பயன்பாடுகள் தற்போதுள்ள பக்கத்தின் காட்சி மற்றும் நடத்தையில் தலையிடாமல் ஒத்திசைவின்றி (asynchronously) (பின்னணியில் - in the background) தரவை அனுப்பவும் மீட்டெடுக்கவும் முடியும்.
+
+XMLHttpRequest பொருளைப் பயன்படுத்தி அல்லது fetch API ஐப் பயன்படுத்தி நீங்கள் AJAX கோரிக்கைகளை (requests) செய்யலாம். ஃபெட்ச் (fetch) பயன்படுத்தும் ஒரு எடுத்துக்காட்டு இங்கே:
+
+```js
+ fetch('https://example.com/api/data')
+ .then(response => response.json())
+ .then(data => console.log(data))
+ .catch(error => console.error(error));
+```
+### 4.9. ஜாவாஸ்கிரிப்டில் ஒரு பிராமிஸ் (promise) என்றால் என்ன?
+
+**பதில்:** ஒரு பிராமிஸ் என்பது எதிர்காலத்தில் ஒரு மதிப்பை (single value) உருவாக்கக்கூடிய ஒரு பொருளாகும்: ஒரு தீர்க்கப்பட்ட மதிப்பு (resolved value) அல்லது அது தீர்க்கப்படாததற்கான காரணம் (எ.கா., நெட்வொர்க் பிழை ஏற்பட்டது). ஒரு பிராமிஸ் 3 சாத்தியமான நிலைகளில் ஒன்றில் இருக்கலாம்: `நிறைவேற்றப்பட்டது (fulfilled)`, `நிராகரிக்கப்பட்டது (rejected)`, அல்லது `நிலுவையில் உள்ளது (pending)`. நிறைவேற்றப்பட்ட மதிப்பை அல்லது நிராகரிப்பதற்கான காரணத்தைக் கையாள, பிராமிஸ் பயனர்கள் கால்பேக்குகளை (callbacks) இணைக்கலாம்.
+
+### 4.10. ஜாவாஸ்கிரிப்டில் உங்களுக்கு ஏன் ஒரு பிராமிஸ் (promise) தேவை?
+
+**பதில்:** ஒத்திசைவற்ற செயல்பாடுகளைக் (asynchronous operations) கையாளப் பிராமிஸ்கள் பயன்படுத்தப்படுகின்றன. அவை கால்பேக் நரகத்தைக் (callback hell) குறைப்பதன் மூலமும் தூய்மையான குறியீட்டை எழுதுவதன் மூலமும் கால்பேக்குகளுக்கு மாற்று அணுகுமுறையை (alternative approach) வழங்குகின்றன.
+
+### 4.11. ஜாவாஸ்கிரிப்டில் சமத்துவத்தை (equality) விளக்குக?
+
+**பதில்:** ஜாவாஸ்கிரிப்ட் இரண்டு வகையான சமத்துவ ஆபரேட்டர்களை (equality operators) வழங்குகிறது: கண்டிப்பான சமத்துவம் (strict equality) `(===)` மற்றும் தளர்வான சமத்துவம் (loose equality) `(==)`
+
+- கண்டிப்பான சமத்துவம் (Strict Equality) `(===)`: எந்த வகை மாற்றமும் (type conversion) செய்யாமல் இந்த ஆபரேட்டர் இரண்டு மதிப்புகளை ஒப்பிடுகிறது. மதிப்புகள் வெவ்வேறு வகைகளைக் கொண்டிருந்தால் (different types), அவை சமமற்றவையாகக் கருதப்படும். மதிப்புகள் ஒரே வகையைக் கொண்டிருந்தால், அவை எண்கள் அல்ல, ஒரே மதிப்பைக் கொண்டிருந்தால், அவை சமமாகக் கருதப்படும். எண்களுக்கு, இரண்டும் NaN ஆக இல்லாமல் ஒரே மதிப்பைக் கொண்டிருந்தாலோ அல்லது ஒன்று `+0` மற்றும் மற்றொன்று `-0` ஆக இருந்தாலோ அவை சமமாகக் கருதப்படும்.
+
+- தளர்வான சமத்துவம் (Loose Equality) `(==)`: செயல்பாடுகளை (operands) ஒப்பிடும்போது இந்த ஆபரேட்டர் வகை மாற்றத்தைச் (type conversion) செய்கிறது. செயல்பாடுகள் (operands) ஒரே வகையாக இருந்தால், கண்டிப்பான சமத்துவ ஆபரேட்டரைப் (strict equality operator) போலவே அவை ஒப்பிடப்படும். செயல்பாடுகள் வெவ்வேறு வகைகளைக் கொண்டிருந்தால், ஜாவாஸ்கிரிப்ட் அவற்றை ஒரு பொதுவான வகையாக மாற்ற முயற்சிக்கிறது, பின்னர் அவற்றை ஒப்பிடுகிறது. வகை மாற்றத்திற்கான (type conversion) விதிகள் சில நேரங்களில் எதிர்பாராத முடிவுகளுக்கு வழிவகுக்கும், எனவே சாத்தியமான சிக்கல்களைத் தவிர்க்கக் கண்டிப்பான சமத்துவ ஆபரேட்டரைப் (strict equality operator) பயன்படுத்தப் பொதுவாகப் பரிந்துரைக்கப்படுகிறது
+
+
+## 5. பொருள் (Object)
+
+### 5.1. ஜாவாஸ்கிரிப்டில் பொருட்களை உருவாக்க சாத்தியமான வழிகள் என்ன?
+
+
+**பதில்:** கீழே உள்ளதைப் போல ஜாவாஸ்கிரிப்டில் ஆப்ஜெக்ட்களை (objects) உருவாக்கப் பல வழிகள் உள்ளன
+
+ஆப்ஜெக்ட் கன்ஸ்ட்ரக்டர் (Object constructor):
+
+i. ஒரு வெற்றுப் பொருளை (empty object) உருவாக்குவதற்கான எளிய வழி Object constructor ஐப் பயன்படுத்துவதாகும். தற்போது இந்த அணுகுமுறை பரிந்துரைக்கப்படவில்லை.
+``` js
+var object = new Object();
+```
+Object() என்பது ஒரு உள்ளமைக்கப்பட்ட கன்ஸ்ட்ரக்டர் செயல்பாடு (built-in constructor function), எனவே "new" முக்கியச் சொல் தேவையில்லை. மேலே உள்ளதை இவ்வாறு எழுதலாம்:
+``` js
+var object = Object();
+```
+ii. ஆப்ஜெக்ட்டின் (Object's) உருவாக்க முறை (create method):
+
+ஒரு Object இன் `create` முறையானது, முன்மாதிரிப் பொருளை (prototype object) அளவுருவாக (parameter) கடந்து (passing) புதிய பொருளை உருவாக்குகிறது.
+
+```js
+var object = Object.create(null);
+```
+iii. ஆப்ஜெக்ட் லிட்டரல் தொடரியல் (Object literal syntax):
+
+
+ஆப்ஜெக்ட் லிட்டரல் தொடரியல் (அல்லது ஆப்ஜெக்ட் இனிஷியலைசர் - object initializer), சுருள் அடைப்புக்குறிக்குள் (curly braces) சுற்றப்பட்ட பெயர்-மதிப்பு ஜோடிகளின் (name-value pairs) கமாவால் பிரிக்கப்பட்ட தொகுப்பாகும் (comma-separated set).
+
+```js
+var object = {
+ name: "Sudheer",
+ age: 34
+};
+
+Object literal property values can be of any data type, including array, function, and nested object.
+```
+குறிப்பு: ஆப்ஜெக்ட்டை உருவாக்க இது எளிதான வழியாகும்
+
+iv. கன்ஸ்ட்ரக்டர் செயல்பாடு (Function constructor):
+
+பொருள் நிகழ்வுகளை (object instances) உருவாக்க எந்தச் செயல்பாட்டையும் உருவாக்கி, `new` ஆபரேட்டரைப் பயன்படுத்தவும்,
+
+```js
+function Person(name) {
+ this.name = name;
+ this.age = 21;
+}
+var object = new Person("Sudheer");
+```
+v. முன்மாதிரியுடன் கன்ஸ்ட்ரக்டர் செயல்பாடு (Function constructor with prototype):
+
+இது கன்ஸ்ட்ரக்டர் செயல்பாட்டைப் போன்றது ஆனால் அவற்றின் பண்புகள் மற்றும் முறைகளுக்கு முன்மாதிரியைப் (prototype) பயன்படுத்துகிறது,
+```js
+function Person() {}
+Person.prototype.name = "Sudheer";
+var object = new Person();
+```
+இது ஒரு செயல்பாட்டு முன்மாதிரியுடன் (function prototype) `object create` முறையுடன் உருவாக்கப்பட்ட ஒரு நிகழ்வுக்குச் (instance) சமமானதாகும், பின்னர் அந்தச் செயல்பாட்டை ஒரு நிகழ்வு மற்றும் அளவுருக்களை (parameters) வாதங்களாக (arguments) கொண்டு அழைக்கவும்.
+```js
+function func() {}
+
+new func(x, y, z);
+```
+(அல்லது - OR)
+```js
+// Create a new instance using function prototype.
+var newInstance = Object.create(func.prototype)
+
+// Call the function
+var result = func.call(newInstance, x, y, z),
+
+// If the result is a non-null object then use it otherwise just use the new instance.
+console.log(result && typeof result === 'object' ? result : newInstance);
+```
+vi. ES6 வகுப்புத் தொடரியல் (ES6 Class syntax):
+
+ஆப்ஜெக்ட்களை உருவாக்க ES6 `class` அம்சத்தை அறிமுகப்படுத்துகிறது
+```js
+class Person {
+ constructor(name) {
+ this.name = name;
+ }
+}
+
+var object = new Person("Sudheer");
+```
+
+
+## 6. பலவகைப்பட்ட (Miscellaneous)
+
+### 6.1. ஜாவாஸ்கிரிப்டில் ஸ்ட்ரிக்ட் மோட் (strict mode) என்றால் என்ன?
+
+**பதில்:** ஸ்ட்ரிக்ட் மோட் (Strict Mode) என்பது ECMAScript 5 இல் உள்ள ஒரு புதிய அம்சமாகும், இது ஒரு நிரல் அல்லது ஒரு செயல்பாட்டை "ஸ்ட்ரிக்ட் (strict)" இயக்கச் சூழலில் வைக்க உங்களை அனுமதிக்கிறது. இந்த வழியில் இது சில நடவடிக்கைகள் எடுக்கப்படுவதைத் தடுக்கிறது மற்றும் கூடுதல் விதிவிலக்குகளை (exceptions) வீசுகிறது. லிட்டரல் எக்ஸ்பிரஷன் (literal expression) "use strict"; ஸ்ட்ரிக்ட் மோடில் (Strict mode) ஜாவாஸ்கிரிப்ட் குறியீட்டைப் பயன்படுத்த உலாவிக்கு அறிவுறுத்துகிறது.
+
+### 6.2. ஜாவாஸ்கிரிப்டில் நல் மதிப்பு (null value) என்றால் என்ன?
+
+**பதில்:** `null` மதிப்பானது எந்தவொரு பொருளின் மதிப்பும் உள்நோக்கத்துடன் இல்லாததைக் குறிக்கிறது. இது ஜாவாஸ்கிரிப்ட்டின் பழமையான மதிப்புகளில் (primitive values) ஒன்றாகும். நல் மதிப்பின் (null value) வகை பொருள் (object) ஆகும். மதிப்பை null என அமைப்பதன் மூலம் நீங்கள் மாறியை காலியாக்கலாம்.
+
+```js
+var user = null;
+console.log(typeof user); //object
+```
+
+### 6.3. ஜாவாஸ்கிரிப்டில் `eval` என்றால் என்ன?
+
+**பதில்:** `eval()` செயல்பாடு சரமாகக் (string) குறிக்கப்படும் ஜாவாஸ்கிரிப்ட் குறியீட்டை மதிப்பிடுகிறது. சரமானது ஜாவாஸ்கிரிப்ட் கோவை (expression), மாறி (variable), அறிக்கை (statement) அல்லது அறிக்கைகளின் வரிசையாக இருக்கலாம்.
+
+```js
+console.log(eval("1 + 2")); // 3
+```
+
+### 6.4. ஜாவாஸ்கிரிப்ட் தொகுக்கப்பட்ட (compiled) அல்லது விளக்கப்பட்ட (interpreted) மொழியா?
+
+**பதில்:** ஜாவாஸ்கிரிப்ட் ஒரு விளக்கப்பட்ட மொழி (interpreted language), தொகுக்கப்பட்ட மொழி (compiled language) அல்ல. உலாவியில் உள்ள ஒரு மொழிபெயர்ப்பாளர் (interpreter) ஜாவாஸ்கிரிப்ட் குறியீட்டைப் படித்து, ஒவ்வொரு வரியையும் விளக்கி, அதை இயக்குகிறார். இப்போதெல்லாம் நவீன உலாவிகள் Just-In-Time (JIT) Compilation எனப்படும் தொழில்நுட்பத்தைப் பயன்படுத்துகின்றன, இது ஜாவாஸ்கிரிப்டை இயங்கும் போது இயங்கக்கூடிய பைட்குறியீட்டில் (executable bytecode) தொகுக்கிறது.
+
+### 6.5. `exec()` மற்றும் `test()` முறைகளுக்கு (methods) இடையிலான வேறுபாடு
+
+**பதில்** `exec()` மற்றும் `test()` முறைகளுக்கு இடையிலான வேறுபாடுகள் பின்வருமாறு:
+
+`exec()`:
+1) இது ஜாவாஸ்கிரிப்டில் உள்ள ஒரு எக்ஸ்பிரஷன் முறையாகும் (expression method), இது குறிப்பிட்ட வடிவமைப்புடன் (pattern) சரத்தைத் (string) தேடப் பயன்படுகிறது.
+2) அது கண்டுபிடிக்கப்பட்டதும், வடிவமைப்பு நேரடியாகத் திருப்பியளிக்கப்படும், இல்லையெனில், அது ஒரு "வெற்று (empty)" முடிவைத் தரும்.
+
+`test()`:
+1) இது ஜாவாஸ்கிரிப்டில் உள்ள ஒரு எக்ஸ்பிரஷன் முறையாகும், இது ஒரு குறிப்பிட்ட வடிவமைப்பு (pattern) அல்லது உரையுடன் (text) ஒரு சரத்தைத் தேடப் பயன்படுகிறது.
+2) அது கண்டறியப்பட்டதும், வடிவமைப்பு பூலியன் மதிப்பை `true` எனத் திருப்பியளிக்கும், இல்லையெனில் `false` எனத் திருப்பியளிக்கும்.
+
+### 6.6. ஜாவாஸ்கிரிப்ட் கேஸ் சென்சிட்டிவ் மொழியா (case-sensitive language) ?
+
+**பதில்:** ஆம், ஜாவாஸ்கிரிப்ட் ஒரு கேஸ் சென்சிட்டிவ் (case sensitive) மொழியாகும். மொழி முக்கியச் சொற்கள் (keywords), மாறிகள் (variables), செயல்பாடு & பொருள் பெயர்கள் (function & object names) மற்றும் வேறு ஏதேனும் அடையாளங்காட்டிகள் (identifiers) எப்பொழுதும் சீரான பெரிய எழுத்துக்களுடன் (consistent capitalization) தட்டச்சு செய்யப்பட வேண்டும்.
+
+## 7. JSON
+
+### 7.1. JSON என்றால் என்ன?
+
+**பதில்:** JSON (JavaScript Object Notation) என்பது தரவுப் பரிமாற்றத்திற்குப் (data interchanging) பயன்படுத்தப்படும் இலகுரக வடிவமாகும் (lightweight format). ஜாவாஸ்கிரிப்டில் பொருள்கள் (objects) கட்டமைக்கப்படும் விதத்தில் இது ஜாவாஸ்கிரிப்ட் மொழியின் துணைக்குழுவை (subset) அடிப்படையாகக் கொண்டது.
+
+### 7.2. JSON இன் தொடரியல் விதிகள் (syntax rules) யாவை?
+
+**பதில்:** கீழே JSON இன் தொடரியல் விதிகளின் பட்டியல் உள்ளது
+
+* தரவு பெயர்/மதிப்பு ஜோடிகளில் (name/value pairs) உள்ளது
+* தரவு கமாக்களால் (commas) பிரிக்கப்படுகிறது
+* சுருள் அடைப்புக்குறிகள் (Curly braces) பொருட்களைப் (objects) பிடித்துக் கொள்கின்றன
+* சதுர அடைப்புக்குறிகள் (Square brackets) வரிசைகளைப் (arrays) பிடித்துக் கொள்கின்றன
+
+### 7.3. JSON ஸ்ட்ரிங்ஃபையின் (stringify) நோக்கம் என்ன?
+
+**பதில்:** ஒரு இணையச் சேவையகத்திற்குத் (web server) தரவை அனுப்பும் போது, தரவு சரம் (string) வடிவத்தில் இருக்க வேண்டும். JSON பொருளை `stringify()` முறையைப் பயன்படுத்திச் சரமாக (string) மாற்றுவதன் மூலம் இதை அடையலாம்.
+
+```js
+var userJSON = { name: "John", age: 31 };
+var userString = JSON.stringify(userJSON);
+console.log(userString); //"{"name":"John","age":31}"
+```
+
+### 7.4. நீங்கள் JSON சரத்தை (string) எவ்வாறு பாகுபடுத்துகிறீர்கள் (parse)?
+
+**பதில்:** இணையச் சேவையகத்திலிருந்து தரவைப் பெறும்போது, தரவு எப்போதும் சரம் (string) வடிவத்தில் இருக்கும். ஆனால் `parse()` முறையைப் பயன்படுத்தி இந்தச் சரம் மதிப்பை ஜாவாஸ்கிரிப்ட் பொருளாக (javascript object) மாற்றலாம்.
+
+```js
+var userString = '{"name":"John","age":31}';
+var userJSON = JSON.parse(userString);
+console.log(userJSON); // {name: "John", age: 31}
+```
+
+### 7.5. உங்களுக்கு ஏன் JSON தேவை?
+
+**பதில்:** உலாவிக்கும் (browser) சேவையகத்திற்கும் (server) இடையே தரவைப் பரிமாறிக் கொள்ளும்போது, தரவு உரையாக (text) மட்டுமே இருக்க முடியும். JSON என்பது உரை மட்டுமே என்பதால், அதை எளிதாகச் சேவையகத்திற்கு (server) அனுப்பலாம், மேலும் எந்த நிரலாக்க மொழியாலும் தரவு வடிவமாகப் (data format) பயன்படுத்தலாம்.
+
+### 7.6. JSON வரிசைகளை (arrays) எப்படி வரையறுக்கிறீர்கள்?
+
+**பதில்:** JSON வரிசைகள் சதுர அடைப்புக்குறிக்குள் (square brackets) எழுதப்பட்டுள்ளன மற்றும் வரிசைகள் ஜாவாஸ்கிரிப்ட் பொருள்களைக் (javascript objects) கொண்டுள்ளன. எடுத்துக்காட்டாக, பயனர்களின் JSON வரிசை கீழே இருக்கும்,
+
+```js
+"users":[
+ {"firstName":"John", "lastName":"Abrahm"},
+ {"firstName":"Anna", "lastName":"Smith"},
+ {"firstName":"Shane", "lastName":"Warn"}
+]
+```
+
+### 7.6. JSON இல், சதுர அடைப்புக்குறிகளின் (square brackets) நோக்கம் என்ன, அவை எவ்வாறு பயன்படுத்தப்படுகின்றன?
+
+**பதில்:** JSON இல், சதுர அடைப்புக்குறிகள் `[ ]` ஆனது JSON தரவுக் கட்டமைப்பிற்குள் (data structures) வரிசைகளை (arrays) இணைக்கவும் (encapsulate) வரையறுக்கவும் பயன்படுத்தப்படுகின்றன. JSON வரிசைகள் (arrays) மதிப்புகளின் தொகுப்பைக் கொண்டிருக்கலாம், அவை பொருள்கள் (objects), சரங்கள் (strings), எண்கள் (numbers) மற்றும் பிற JSON வரிசைகள் உட்படப் பல்வேறு தரவு வகைகளாக இருக்கலாம்.
diff --git a/ta/interview-questions/intermediate-level.md b/ta/interview-questions/intermediate-level.md
new file mode 100644
index 00000000..8efa0858
--- /dev/null
+++ b/ta/interview-questions/intermediate-level.md
@@ -0,0 +1,441 @@
+---
+layout: editorial
+title: Intermediate level JavaScript Interview Questions
+description:
+chapter: 22
+pageNumber: 175
+---
+
+# இடைநிலை நிலை ஜாவாஸ்கிரிப்ட் நேர்காணல் கேள்விகள் (Intermediate Level JavaScript Interview Questions)
+## 1. சுழல்கள் (Loops)
+### 1.1. ஜாவாஸ்கிரிப்ட் சுழலில் ஒரு மறு செய்கையின் (iteration) வரையறை என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்ட் சுழலில் ஒரு மறு செய்கை (iteration) என்பது சுழலின் உடலின் ஒவ்வொரு தனிப்பட்ட செயலாக்கத்தையும் குறிக்கிறது, பொதுவாகச் சுழலின் ஒரு சுழற்சியுடன் (cycle) ஒத்துள்ளது.
+
+### 1.2. ஜாவாஸ்கிரிப்டில் உள்ள அனைத்து லூப்பிங் கட்டமைப்புகளும் (looping structures) என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் பல்வேறு லூப்பிங் கட்டமைப்புகள் பயன்படுத்தப்படுகின்றன. அவற்றில் சில பின்வருமாறு:
+
+**While சுழல் (While loop)**: [while](../loops/while.md) சுழல் என்பது கட்டுப்பாடு ஓட்ட அறிக்கையாகும் (control flow statement), இது கொடுக்கப்பட்ட பூலியன் நிபந்தனையின் (Boolean condition) அடிப்படையில் குறியீட்டை மீண்டும் மீண்டும் செயல்படுத்த அனுமதிக்கிறது. `while` சுழலை மீண்டும் மீண்டும் `if` அறிக்கையாகக் கருதலாம்.
+
+**For சுழல் (For loop)**: [for](../loops/for.md) சுழல் லூப் அமைப்பை (loop structure) எழுதுவதற்கான சுருக்கமான வழியை வழங்குகிறது. `while` சுழல் போலல்லாமல், `for` அறிக்கையானது தொடக்கமாக்கல் (initialization), நிபந்தனை மற்றும் அதிகரிப்பு/குறைவு (increment/decrement) ஆகியவற்றை ஒரே வரியில் பயன்படுத்துகிறது, இதன் மூலம் குறியீட்டைச் சுருக்கமாகவும் எளிதாகவும் பிழைத்திருத்தவும் (debug) வழங்குகிறது.
+
+**Do while**: [do-while](../loops/dowhile.md) சுழல் என்பது `while` சுழலைப் போன்றது, அறிக்கைகளைச் செயல்படுத்திய பிறகு நிபந்தனையைச் சரிபார்க்கிறது என்பதே ஒரே வித்தியாசம், எனவே இது வெளியேறும் கட்டுப்பாட்டுச் சுழலுக்கு (Exit Control Loop) ஒரு எடுத்துக்காட்டு ஆகும்.
+
+### 1.3. சுழலில் `break` அறிக்கை (statement) எவ்வாறு செயல்படுகிறது?
+
+**பதில்:** பிரேக் அறிக்கை (break statement) தற்போதைய சுழல் அல்லது சுவிட்ச் (switch) அறிக்கையை நிறுத்துகிறது மற்றும் நிறுத்தப்பட்ட அறிக்கையைத் தொடர்ந்து வரும் அறிக்கைக்கு நிரல் கட்டுப்பாட்டை (program control) மாற்றுகிறது. லேபிளிடப்பட்ட அறிக்கைக்குள் (labeled statement) பயன்படுத்தப்படும் போது லேபிளிடப்பட்ட அறிக்கையைக் கடந்தும் இது பயன்படுத்தப்படலாம்.
+
+### 1.4. சுழலில் `continue` அறிக்கை எவ்வாறு செயல்படுகிறது?
+
+**பதில்:** `continue` உத்தரவு (directive) என்பது `break` அறிக்கையின் "இலகுவான பதிப்பு (lighter version)" ஆகும். இது முழுச் சுழலையும் (loop) நிறுத்தாது; அதற்குப் பதிலாக, இது தற்போதைய மறு செய்கையை (iteration) நிறுத்தி, சுழலை புதியதைத் தொடங்கும்படி கட்டாயப்படுத்துகிறது (நிபந்தனை அனுமதித்தால்).
+
+## 2. சுவிட்ச் அறிக்கை (Switch statement)
+
+### 2.1. ஜாவாஸ்கிரிப்டில் சுவிட்ச் (switch) அறிக்கை என்றால் என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் ஒரு சுவிட்ச் (switch) அறிக்கை என்பது ஒரு கட்டுப்பாட்டு ஓட்ட அறிக்கை (control flow statement) ஆகும், இது ஒரு கோவையை (expression) மதிப்பிடுகிறது மற்றும் பொருந்திய வழக்கின் (matched case) அடிப்படையில் குறியீட்டின் குறிப்பிட்ட தொகுதியை (block) செயல்படுத்துகிறது.
+
+### 2.2. சுவிட்ச் அறிக்கையைப் பயன்படுத்துவதன் நன்மைகள் என்ன?
+
+**பதில்:** [switch](../conditional/switch.md) அறிக்கை பல காசோலைகளை (checks) மாற்றும், மேலும் இது மிகவும் விளக்கமான மற்றும் படிக்க எளிதானது. சுவிட்ச் அறிக்கைகள் குறியீடு வாசிப்புத்திறனை (code readability) மேம்படுத்துகின்றன, சிறந்த செயல்திறனை (performance) வழங்குகின்றன, சிக்கலான நிபந்தனைகளை (complex conditionals) எளிதாக்குகின்றன, பராமரிப்பை (maintainability) மேம்படுத்துகின்றன மற்றும் சுத்தமான தொடரியல் (cleaner syntax) ஆதரிக்கின்றன.
+
+### 2.3. சுவிட்ச் அறிக்கையில் கேஸ் (case) அறிக்கைகளின் வரிசை முக்கியமானதா?
+
+**பதில்:** சுவிட்ச் (switch) அறிக்கையில் கேஸ் (case) அறிக்கைகளின் வரிசை முக்கியமானது, குறிப்பாக வீழ்ச்சி நடத்தை (fall-through behavior) பயன்படுத்தும் போது. வழக்குகள் (Cases) தொடர்ச்சியாக மதிப்பிடப்படுகின்றன (sequentially), எனவே முன்னதாகக் கண்டறியப்பட்ட பொருந்தக்கூடிய வழக்கு (matching case), அடுத்தடுத்த வழக்குகள் சோதிக்கப்படுவதைத் தடுக்கும், இது செயல்பாட்டையும் செயல்திறனையும் பாதிக்கும்.
+
+## 3. ஜாவாஸ்கிரிப்ட் குக்கீகள் (JavaScript cookies)
+
+### 3.1. ஜாவாஸ்கிரிப்ட் குக்கீகள் என்றால் என்ன?
+
+**பதில்:** [குக்கீகள் (Cookies)](../browser-object-model-bom/cookies.md) என்பவை பயனரின் கணினியில் சேமிக்கப்படும் சிறிய கோப்புகள். ஒரு குறிப்பிட்ட கிளையன்ட் (client) மற்றும் இணையதளத்திற்கு (website) குறிப்பிட்ட அளவிலான தரவை வைத்திருக்க அவை பயன்படுத்தப்படுகின்றன மற்றும் வலைச் சேவையகம் (web server) அல்லது வாடிக்கையாளரின் கணினி (client’s computer) மூலம் அணுகலாம். குக்கீகள் கண்டுபிடிக்கப்பட்டபோது, அவை அடிப்படையில் உங்களைப் பற்றியும் உங்கள் விருப்பங்களைப் பற்றியும் (preferences) தகவல்களைக் கொண்ட சிறிய ஆவணங்களாகும். எடுத்துக்காட்டாக, உங்கள் வலைத்தளத்தைப் பார்க்க விரும்பும் மொழியை நீங்கள் தேர்ந்தெடுக்கும்போது, இணையதளம் உங்கள் கணினியில் உள்ள குக்கீ (cookie) எனப்படும் ஆவணத்தில் தகவலைச் சேமிக்கும், அடுத்த முறை நீங்கள் இணையதளத்திற்குச் செல்லும்போது, அதைப் படிக்க முடியும். முன்னதாகவே சேமிக்கப்பட்ட குக்கீ.
+
+### 3.2. ஜாவாஸ்கிரிப்ட் பயன்படுத்தி குக்கீயை எவ்வாறு உருவாக்குவது?
+
+**பதில்:** ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி குக்கீயை (cookie) உருவாக்க `document.cookie` பொருளுக்கு ஒரு சரம் (string) மதிப்பை ஒதுக்க வேண்டும்.
+````javascript
+document.cookie = "key1 = value1; key2 = value2; expires = date";
+````
+
+### 3.3. ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி ஒரு குக்கீயை (cookie) எவ்வாறு படிப்பது?
+
+**பதில்:** `document.cookie` இன் மதிப்பு ஒரு குக்கீயை (cookie) உருவாக்கப் பயன்படுகிறது. நீங்கள் குக்கீயை (cookie) அணுக விரும்பும் போதெல்லாம் சரத்தைப் (string) பயன்படுத்தலாம். `document.cookie` சரமானது அரைப்புள்ளிகளால் (semicolons) பிரிக்கப்பட்ட `name = value` ஜோடிகளின் பட்டியலை வைத்திருக்கிறது, இதில் பெயர் என்பது குக்கீயின் பெயராகும் மற்றும் மதிப்பு அதன் சரம் மதிப்பு.
+
+### 3.4. ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி குக்கீயை எவ்வாறு நீக்குவது?
+
+**பதில்:** ஒரு குக்கீயை நீக்குவது குக்கீயை உருவாக்குவது அல்லது படிப்பதை விட மிகவும் எளிதானது, நீங்கள் `expires = “past time”` என்பதை அமைக்க வேண்டும் மற்றும் குக்கீயை நீக்கச் சிலர் உங்களை அனுமதிக்காவிட்டால், சரியான குக்கீ பாதையை (cookie path) வரையறுக்கிறது என்பதை உறுதிப்படுத்திக் கொள்ளவும்.
+
+## 4. ஜாவாஸ்கிரிப்டில் பாப்-அப் பெட்டிகள் (Pop-up boxes in JavaScript)
+
+### 4.1. ஜாவாஸ்கிரிப்டில் கிடைக்கும் பாப் அப் பெட்டிகளின் வகைகள் யாவை?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் மூன்று வகையான பாப் பெட்டிகள் (pop boxes) உள்ளன:
+`எச்சரிக்கை (Alert)`, `உறுதிப்படுத்தல் (Confirm)`, `தூண்டுதல் (Prompt)`.
+
+### 4.2. எச்சரிக்கைப் பெட்டிக்கும் (alert box) உறுதிப்படுத்தல் பெட்டிக்கும் (confirmation box) என்ன வித்தியாசம்?
+
+**பதில்:** ஒரு எச்சரிக்கைப் பெட்டியானது (alert box) OK பட்டனை மட்டுமே காண்பிக்கும். பயனர் ஒப்புக்கொள்ள வேண்டும் என்ற ஒப்பந்தத்தைப் பற்றிப் பயனருக்குத் தெரிவிக்க இது பயன்படுகிறது. ஆனால் ஒரு உறுதிப்படுத்தல் பெட்டி (Confirmation box) OK மற்றும் Cancel ஆகிய இரண்டு பொத்தான்களைக் காண்பிக்கும், அங்குப் பயனர் ஏற்க வேண்டுமா இல்லையா என்பதை முடிவு செய்யலாம்.
+
+## 5. அம்பு செயல்பாடுகள் (Arrow Functions)
+
+### 5.1. அம்பு செயல்பாட்டின் (arrow function) வரையறை என்ன?
+
+**பதில்:** அம்பு குறியீட்டைப் (arrow notation) பயன்படுத்தி, ஜாவாஸ்கிரிப்டில் அநாமதேயச் செயல்பாடுகளை (anonymous functions) வரையறுப்பதற்கான ஒரு சுருக்கமான தொடரியல் (syntax) ஒரு அம்புச் செயல்பாடு (arrow function) ஆகும். இது குறுகிய தொடரியல் (shorter syntax), "this" என்பதன் லெக்சிக்கல் ஸ்கோப்பிங் (lexical scoping) ஆகியவற்றை வழங்குகிறது மற்றும் கட்டமைப்பாளராகப் (constructor) பயன்படுத்த முடியாது.
+
+### 5.2. செயல்பாட்டுக் கோவைகளிலிருந்து (function expressions) அம்பு செயல்பாடுகள் (arrow functions) எவ்வாறு வேறுபடுகின்றன?
+
+**பதில்:** அம்புச் செயல்பாடுகள் (Arrow functions) குறுகிய தொடரியல் (shorter syntax) வழங்குகின்றன, அவற்றின் சொந்த this, arguments, super அல்லது new.target ஆகியவற்றைக் கொண்டிருக்கவில்லை, மேலும் செயல்பாட்டுக் கோவைகளைப் (function expressions) போலன்றி, கன்ஸ்ட்ரக்டர்களாகப் பயன்படுத்த முடியாது.
+
+### 5.3. லெக்சிகல் 'this' பிணைப்பு என்பது அம்பு செயல்பாடுகளில் (arrow functions) என்ன அர்த்தம்?
+
+**பதில்:** அம்பு செயல்பாடுகளில் "லெக்சிகல் திஸ் (Lexical this)" பிணைப்பு என்பது அவை தங்களுக்குரிய 'this' சூழலை உருவாக்கவில்லை என்பதாகும்; அதற்குப் பதிலாக, அவை சுற்றியுள்ள, இணைக்கும் ஸ்கோப்பில் (enclosing scope) இருந்து 'this' மரபுரிமையாகப் (inherit) பெறுகின்றன, பொதுவான 'this'-தொடர்புடைய சிக்கல்களைக் குறைக்கின்றன.
+
+### 5.4. அம்பு செயல்பாடுகளைப் (arrow functions) பயன்படுத்துவதன் நன்மைகள் என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் அம்பு செயல்பாடுகளைப் (arrow functions) பயன்படுத்துவதன் நன்மைகள் குறுகிய தொடரியல் (shorter syntax), மறைமுகமான வருமானம் (implicit return) மற்றும் லெக்சிகல் 'this' பிணைப்பு ஆகியவை அடங்கும்.
+
+### 5.5. அம்பு செயல்பாடுகளுக்கான (arrow functions) பொதுவான பயன்பாட்டு வழக்குகள் (use cases) யாவை?
+
+**பதில்:** ஆப்ஜெக்ட் முறைகள் (object methods), ஈவென்ட் லிசனர்ஸ் (event listeners), கால்பேக்குகள் (callbacks) மற்றும் குறுகிய, சுருக்கமான தொடரியல் (syntax) தேவைப்படும் பிற செயல்பாடுகளுக்கு அம்பு செயல்பாடுகள் பொதுவாகப் பயன்படுத்தப்படுகின்றன.
+
+
+## 6. வழக்கமான கோவை (Regular Expression)
+
+### 6.1. வழக்கமான கோவை (Regular Expression) என்றால் என்ன?
+
+**பதில்:** ஒரு வழக்கமான கோவை (regular expression) என்பது தேடல் வடிவத்தை (search pattern) உருவாக்கும் எழுத்துக்களின் வரிசையாகும். உரை (text) தரவைத் தேட இந்தத் தேடல் வடிவத்தைப் பயன்படுத்தலாம். அனைத்து வகையான உரை தேடல் மற்றும் உரை மாற்றீட்டுச் செயல்பாடுகளைச் (textreplace operations) செய்ய இவற்றைப் பயன்படுத்தலாம். இப்போது தொடரியல் வடிவமைப்பைப் (syntax format) பார்ப்போம்,
+
+```js
+ /pattern/modifiers;
+```
+
+எடுத்துக்காட்டாக, கேஸ்-இன்சென்சிட்டிவ் பயனர்பெயருடன் (case-insensitive username) வழக்கமான கோவை (regular expression) அல்லது தேடல் வடிவம் (search pattern) பின்வருமாறு,
+
+```js
+/John/i;
+```
+
+### 6.2. வழக்கமான கோவையில் (Regular expression) கிடைக்கும் சரம் முறைகள் (string methods) யாவை?
+
+**பதில்:** ரெகுலர் எக்ஸ்பிரஷன்களில் இரண்டு சரம் முறைகள் உள்ளன: `search()` மற்றும் `replace()`. `search()` முறையானது ஒரு பொருத்தத்தைத் தேட ஒரு கோவையைப் பயன்படுத்துகிறது மற்றும் போட்டியின் நிலையை (position) வழங்குகிறது.
+
+```js
+var msg = "Hello John";
+var n = msg.search(/John/i); // 6
+```
+
+வடிவமைப்பு மாற்றப்படும் திருத்தப்பட்ட சரத்தைத் திருப்பியளிக்க `replace()` முறை பயன்படுத்தப்படுகிறது.
+
+```js
+var msg = "Hello John";
+var n = msg.replace(/John/i, "Buttler"); // Hello Buttler
+```
+
+### 6.3. வழக்கமான கோவையில் மாற்றிகள் (modifiers) என்றால் என்ன?
+
+**பதில்:** கேஸ்-இன்சென்சிட்டிவ் மற்றும் உலகளாவிய தேடல்களைச் (case-insensitive and global searches) செய்ய மாற்றிகளைப் (Modifiers) பயன்படுத்தலாம். சில மாற்றிகளைப் பட்டியலிடுவோம்:
+
+| மாற்றி (Modifier) | விளக்கம் (Description) |
+| -------- | ------------------------------------------------ |
+| `i` | கேஸ்-இன்சென்சிட்டிவ் பொருத்தம் (case-insensitive matching) செய்யவும். |
+| `g` | உலகளாவிய பொருத்தத்தைச் (global match) செய்யவும் (அனைத்துப் பொருத்தங்களையும் கண்டறியவும்). |
+| `m` | பன்வரிசைப் பொருத்தம் (multiline matching) செய்யவும். |
+
+உலகளாவிய மாற்றியின் (global modifier) உதாரணத்தை எடுத்துக் கொள்வோம்,
+
+```js
+var text = "Learn JS one by one";
+var pattern = /one/g;
+var result = text.match(pattern); // one,one
+```
+
+### 6.4. வழக்கமான கோவை வடிவங்கள் (regular expression patterns) என்றால் என்ன?
+
+**பதில்:** எழுத்துகளைப் பொருத்துவதற்காக (match characters) வழக்கமான கோவைகள் (Regular Expressions) வடிவங்களின் குழுவை வழங்குகின்றன. அடிப்படையில் அவை 3 வகைகளாகப் பிரிக்கப்பட்டுள்ளன,
+
+ + i.அடைப்புக்குறிகள் (Brackets): இவை எழுத்துகளின் வரம்பைக் (range) கண்டறியப் பயன்படுகின்றன. எடுத்துக்காட்டாக, கீழே சில பயன்பாட்டு வழக்குகள் (use cases) உள்ளன,
+ - a. [abc]: அடைப்புக்குறிக்குள் (a,b,c) உள்ள எழுத்துக்களில் ஏதேனும் ஒன்றைக் கண்டறியப் பயன்படுகிறது.
+ - b. [0-9]: அடைப்புக்குறிக்கு இடையே உள்ள இலக்கங்களில் ஏதேனும் ஒன்றைக் கண்டறியப் பயன்படுகிறது.
+ - c. (a|b): | உடன் பிரிக்கப்பட்ட மாற்றுருக்களில் (alternatives) ஏதேனும் ஒன்றைக் கண்டறியப் பயன்படுகிறது
+ + ii.மெட்டாக்கரக்டர்கள் (Metacharacters): இவை சிறப்பு அர்த்தம் கொண்ட எழுத்துகள், எடுத்துக்காட்டாக, கீழே சில பயன்பாட்டு வழக்குகள் உள்ளன.
+ - a. \d: இலக்கத்தைக் கண்டறியப் பயன்படுகிறது
+ - b. \s: ஒரு இடைவெளி (whitespace) எழுத்தைக் கண்டறியப் பயன்படுகிறது
+ - c. \b: ஒரு வார்த்தையின் தொடக்கத்தில் அல்லது முடிவில் பொருத்தத்தைக் கண்டறியப் பயன்படுகிறது
+ + iii.அளவீடுகள் (Quantifiers): அளவுகளை வரையறுக்க இவை பயன்படுகின்றன எடுத்துக்காட்டாக, கீழே சில பயன்பாட்டு வழக்குகள் உள்ளன
+ - a. n+: குறைந்தது ஒரு nஐயாவது கொண்ட எந்தச் சரத்திற்கும் (string) பொருத்தங்களைக் கண்டறியப் பயன்படுகிறது
+ - b. n*: n இன் பூஜ்ய அல்லது அதற்கு மேற்பட்ட நிகழ்வுகளைக் (occurrences) கொண்ட எந்தச் சரத்திற்கும் பொருத்தங்களைக் கண்டறியப் பயன்படுகிறது
+ - c. n?: n இன் பூஜ்ய அல்லது ஒரு நிகழ்வைக் கொண்ட எந்தச் சரத்திற்கும் பொருத்தங்களைக் கண்டறியப் பயன்படுகிறது
+
+### 6.5. RegExp பொருள் (object) என்றால் என்ன?
+
+**பதில்:** RegExp பொருள் (object) என்பது முன்வரையறுக்கப்பட்ட பண்புகள் (predefined properties) மற்றும் முறைகளைக் (methods) கொண்ட வழக்கமான வெளிப்பாடு (regular expression) பொருளாகும். RegExp பொருளின் எளிய பயன்பாட்டைப் பார்ப்போம்,
+
+```js
+var regexp = new RegExp("\\w+");
+console.log(regexp);
+// expected output: /\w+/
+```
+
+### 6.6. ஒரு வடிவமைப்புக்கான சரத்தை (string) எவ்வாறு தேடுவது?
+
+**பதில்:** வடிவமைப்பிற்கான சரத்தைத் தேடுவதற்கு, முடிவைப் பொறுத்து `true` அல்லது `false` என்பதைத் திருப்பித் தர வழக்கமான கோவையின் `test()` முறையைப் பயன்படுத்தலாம்.
+
+```js
+var pattern = /you/;
+console.log(pattern.test("How are you?")); //true
+```
+### 6.7. ஜாவாஸ்கிரிப்டில் கரியிங் (Currying) என்றால் என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில் கரியிங் பல வாதங்களைக் (arguments) கொண்ட செயல்பாட்டை (function) ஒரு ஒற்றை வாதத்தை எடுக்கும் செயல்பாடுகளின் உள்ளமைக்கப்பட்ட (nested) தொடராக மாற்றுகிறது. ஒரே மாறியை (variable) பலமுறை கடந்து செல்வதைத் தவிர்க்க கரியிங் உங்களுக்கு உதவுகிறது, மேலும் உயர் வரிசைச் செயல்பாட்டை (higher order function) உருவாக்க இது உங்களுக்கு உதவுகிறது.
+
+அதாவது, ஒரு செயல்பாடு அழைப்பை (function call) `sum(1,2,3)` லிருந்து `sum(1)(2)(3)` என மாற்றும்போது.
+
+ஒரு செயல்பாடு எடுக்கும் வாதங்களின் (arguments) எண்ணிக்கை ஆரிட்டி (arity) என்றும் அழைக்கப்படுகிறது.
+
+```js
+function sum(a, b) {
+ // do something
+}
+function _sum(a, b, c) {
+ // do something
+}
+```
+`sum` செயல்பாடு இரண்டு வாதங்களை (arguments) (இரண்டு ஆரிட்டி செயல்பாடு) எடுக்கிறது மற்றும் `_sum` மூன்று வாதங்களை (மூன்று ஆரிட்டி செயல்பாடு) எடுக்கிறது.
+
+கரியிங் செய்யப்பட்ட (Curried) செயல்பாடுகள் க்ளோஷர்களைச் சங்கிலி (chaining) மூலமாகவும் அவற்றின் உள் செயல்பாடுகளை ஒரே நேரத்தில் வரையறுத்து உடனடியாகத் திருப்பித் தருவதன் மூலமும் கட்டமைக்கப்படுகின்றன.
+
+## 7. தற்காலிக டெட் ஸோன் (Temporal Dead Zone)
+
+### 7.1. ES6 இல் டெம்போரல் டெட் ஸோன் (Temporal Dead Zone) என்றால் என்ன?
+
+**பதில்:** ES6 இல் `let` மற்றும் `const` ஹொயிஸ்ட் (hoist) செய்யப்படுகின்றன (`var`, `class` மற்றும் `function` போன்றவை), ஆனால் ஸ்கோப்பிற்குள் நுழைவதற்கும்
+அறிவிக்கப்படுவதற்கும் இடையே ஒரு கால அவகாசம் உள்ளது, அங்கு அவற்றை அணுக முடியாது. இந்தக் கால அவகாசமே தற்காலிக டெட் ஸோன் (TDZ - temporal dead zone) ஆகும்.
+
+```javascript
+//console.log(aLet) // would throw ReferenceError
+let aLet;
+console.log(aLet); // undefined
+aLet = 10;
+console.log(aLet); // 10
+```
+
+
+### 7.2. ஜாவாஸ்கிரிப்டில் ட்ரூத்தி (Truthy) மற்றும் ஃபால்சி (Falsy) மதிப்புகள் என்றால் என்ன?
+
+**பதில்:** ஜாவாஸ்கிரிப்டில், "ட்ரூத்தி (truthy)" மற்றும் "ஃபால்சி (falsy)" என்பது பூலியன் சூழல்களில் (Boolean contexts) நிபந்தனைகள் (conditions), சுழல்கள் (loops) போன்ற மதிப்புகள் எவ்வாறு மதிப்பிடப்படுகின்றன என்பதை விவரிக்கப் பயன்படுத்தப்படும் சொற்கள். நிபந்தனை தர்க்கத்துடன் (conditional logic) வேலை செய்யும் போது உண்மையான (truthy) மற்றும் தவறான (falsy) மதிப்புகளைப் புரிந்துகொள்வது முக்கியமானது.
+
+#### ஃபால்சி மதிப்புகள் (Falsy Values):
+
+- `false`: பூலியன் மதிப்பு false.
+- `0`: எண் (numeric) மதிப்பு பூஜ்ஜியம்.
+- `""`: வெற்றுச் சரம் (empty string).
+- `null`: பொருளின் இல்லாமையைக் குறிக்கும் ஒரு சிறப்பு மதிப்பு (special value).
+- `undefined`: மதிப்பு ஒதுக்கப்படாத மாறி (variable).
+- `NaN`: "எண் அல்ல (Not-a-Number)" என்பதைக் குறிக்கிறது மற்றும் தவறான எண்ணைக் (invalid number) குறிக்கிறது.
+- இந்த மதிப்புகளில் ஏதேனும் பூலியன் (Boolean) சூழலில் பயன்படுத்தப்படும்போது, அவை "தவறானவை (falsy)" என்று கருதப்படுகின்றன, அதாவது அவை தவறு (false) என்பதற்குச் சமமாகக் கருதப்படுகின்றன.
+
+ஃபால்சி மதிப்புகளின் எடுத்துக்காட்டுகள்:
+```javascript
+if (false) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படாது, ஏனெனில் false என்பது falsy.
+}
+
+if (0) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படாது, ஏனெனில் 0 என்பது falsy.
+}
+
+if ("" === false) {
+ // இந்த ஒப்பீடு உண்மை, ஏனெனில் வெற்றுச் சரம் (empty string) falsy ஆகும்.
+}
+
+if (null) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படாது, ஏனெனில் null என்பது falsy.
+}
+
+if (undefined) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படாது, ஏனெனில் undefined என்பது falsy.
+}
+
+if (NaN) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படாது, ஏனெனில் NaN என்பது falsy.
+}
+```
+#### ட்ரூத்தி மதிப்புகள் (Truthy Values):
+
+ஜாவாஸ்கிரிப்டில் வெளிப்படையாகத் "தவறானது (falsy)" அல்லாத எந்த மதிப்பும் "உண்மையானது (truthy)" என்று கருதப்படுகிறது. பூலியன் சூழல்களில் (Boolean contexts) இந்த மதிப்புகள் உண்மை (true) என்பதற்குச் சமமாகக் கருதப்படுகின்றன.
+
+ட்ரூத்தி (truth) மதிப்புகளின் எடுத்துக்காட்டு:
+```javascript
+if (true) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படும், ஏனெனில் true என்பது truthy.
+}
+
+if (42) {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படும், ஏனெனில் 42 என்பது truthy.
+}
+
+if ("Hello") {
+ // இந்தக் குறியீட்டு தொகுதி செயல்படும், ஏனெனில் காலியில்லாத சரம் truthy ஆகும்.
+}
+
+if ({} === true) {
+ // இந்த ஒப்பீடு தவறு, ஏனெனில் காலி பொருள் (empty object) truthy ஆனாலும் true க்கு சமம் இல்லை.
+}
+
+if ([] === true) {
+ // இந்த ஒப்பீடு தவறு, ஏனெனில் காலி வரிசை (empty array) truthy ஆனாலும் true க்கு சமம் இல்லை.
+}
+```
+
+உண்மையான (truthy) மற்றும் தவறான (falsy) மதிப்புகளைப் புரிந்துகொள்வது, மிகவும் சுருக்கமான மற்றும் வெளிப்படையான குறியீட்டை (expressive code) எழுத அனுமதிக்கிறது, குறிப்பாக நிபந்தனை தர்க்கத்தைக் (conditional logic) கையாளும் போது. நிபந்தனைகளை மதிப்பிடும்போதும் (evaluating) மற்றும் இரண்டு மதிப்புகள் அல்லது செயல்களுக்கு இடையே தேர்வு செய்யும்போதும் சிறிய மற்றும் படிக்கக்கூடிய குறியீட்டை (readable code) எழுத இந்த நடத்தையை நாம் பயன்படுத்தலாம்.
+
+## 8. வகுப்புகள் (Classes)
+
+### 8.1. ஜாவாஸ்கிரிப்ட் வகுப்புகள் (classes) என்றால் என்ன?
+
+**பதில்:** வகுப்புகள் பொருள்களை (objects) உருவாக்குவதற்கான வார்ப்புருக்கள் (templates). அவை தரவையும் (data) தரவுடன் செயல்படும் தர்க்கத்தையும் (logic) இணைக்கின்றன (encapsulate).
+
+### 8.2. வகுப்பு உறுப்பினர்கள் (class members) என்றால் என்ன?
+
+**பதில்:** வகுப்பு உறுப்பினர்கள் என்பது ஒரு வகுப்பிற்குள் (class) உள்ள முறைகள் (methods) மற்றும் புலங்களைக் (fields) குறிக்கிறது.
+
+ + i. முறைகள் (Methods)
+ - வகுப்பிற்குள் (class) வரையறுக்கப்பட்ட செயல்பாடுகள் (Functions).
+ - அவர்கள் புலங்களில் (fields) செயல்பட முடியும் மற்றும் தரவுடன் செயல்களைச் செய்ய முடியும்.
+ - அவர்கள் வகுப்பின் நடத்தையை (behavior) வரையறுக்கிறார்கள்.
+ + ii. புலங்கள் (Fields)
+ - வகுப்பிற்குள் (class) வரையறுக்கப்பட்ட மாறிகள் (Variables).
+ - அவர்கள் கிளாஸ் இன்ஸ்டன்ஸ்களுக்கு (class instance) குறிப்பிட்ட தரவை வைத்திருக்கிறார்கள்.
+ - அவை வகுப்பின் நிலையை (state) வரையறுக்கின்றன.
+
+### 8.3. ஜாவாஸ்கிரிப்டில் அணுகல் மாற்றிகளின் (access modifiers) வகைகள் மற்றும் அவற்றின் நோக்கத்தை விளக்குங்கள்
+
+**பதில்:** தகவலை என்காப்சுலேட் (encapsulate) செய்யப் பயன்படுத்தப்படும் மூன்று வகையான அணுகல் மாற்றிகள் (access modifiers) உள்ளன.
+
+ + பொது (Public)
+ - எங்கிருந்தும் அணுகலாம்.
+ + தனியார் (Private)
+ - ```#``` குறியீட்டுடன் உறுப்பினர்களை முன்னொட்டுவதன் மூலம் (prefixing) குறிக்கப்படுகிறது.
+ - நிகழ்வுகள் (instances) அல்லது குழந்தை (child) வகுப்புகளிலிருந்து அணுக முடியாது.
+ - வகுப்பிற்குள்ளேயே (class itself) கிடைக்கும்.
+ - தகவலை மறைக்கப் பயன்படுகிறது.
+ + பாதுகாக்கப்பட்டது (Protected)
+ - ```_``` குறியீட்டுடன் உறுப்பினர்களை முன்னொட்டுவதன் மூலம் குறிக்கப்படுகிறது.
+ - வகுப்பிற்குள் இருந்தும் அதிலிருந்து மரபுரிமையாக (inherits) வரும் எந்த வகுப்பிலிருந்தும் அணுகலாம்.
+ - வகுப்புகளுக்கு இடையே நிலையைப் (state) பகிர்வதற்குப் பயனுள்ளதாக இருக்கும்.
+
+
+### 8.4. வகுப்புப் பண்புகள் (class properties) யாவை?
+**பதில்:** பண்புகள் (Properties) என்பது ஒரு வகுப்பிற்குள் உள்ள பெறுபவர் (getter) மற்றும் அமைப்பவரைக் (setter) குறிக்கிறது, இது ஒரு வகுப்பின் புலங்களுக்கான (fields) அணுகலைக் கட்டுப்படுத்த ஒரு வழியை வழங்குகிறது. பெறுபவர் (getter) மற்றும் அமைப்பவர் (setter) என்பவை ஒரு செயல்பாடு (function) அணுகப்படும்போது அழைக்கப்படும் பண்புப் பிணைப்புகள் (property bindings) ஆகும்.
+
+ + i. கெட்டர் (Getter)
+ - கெட்டர் என்பது ஒரு புலத்தின் (field) மதிப்பைப் பெறும் முறையாகும்.
+ - இது சரியாகப் பூஜ்ஜிய அளவுருக்களைக் (parameters) கொண்டிருக்க வேண்டும்.
+ - இது ஒரு மதிப்பை (value) வழங்க வேண்டும்.
+ - இது ```get``` முக்கியச்சொல்லைப் (keyword) பயன்படுத்தி வரையறுக்கப்படுகிறது.
+ + ii. செட்டர் (Setter)
+ - செட்டர் என்பது ஒரு புலத்தின் (field) மதிப்பை அமைக்கும் முறையாகும்.
+ - இது சரியாக ஒரு அளவுருவைக் (parameter) கொண்டிருக்க வேண்டும்.
+ - இது ```set``` முக்கியச்சொல்லைப் (keyword) பயன்படுத்தி வரையறுக்கப்படுகிறது.
+
+சில குறிப்பிட்ட புலங்களை (fields) ஒரு குறிப்பிட்ட வழியில் மட்டுமே அணுக முடியும் அல்லது மாற்றியமைக்க முடியும் என்பதை உறுதிப்படுத்த தரவை என்காப்சுலேட் (encapsulate) செய்ய அவை பயன்படுத்தப்படுகின்றன.
+
+கெட்டர்கள் (getters) மற்றும் செட்டர்களைப் (setters) பயன்படுத்தி என்காப்சுலேஷனின் (encapsulation) எடுத்துக்காட்டு:
+
+```javascript
+ class Task {
+ #id;
+ #description;
+
+ constructor(id, description, ) {
+ // தனியார் புலங்களை (private fields) நேரடியாக மாற்றாமல் செட்டர்களை (setters) பயன்படுத்துக
+ this.id = id;
+ this.description = description;
+ }
+
+ // மதிப்புகளை வாசிக்க கெட்டர்களை (getters) பயன்படுத்துக
+ get id() {
+ return this.#id;
+ }
+
+ // ...
+
+ // தரவை எழுதுவதற்கு முன் சரிபார்க்க செட்டர்களை (setters) பயன்படுத்துக
+ set id(id) {
+ // ...புதிய ID ஐ சரிபார்க்கவும்
+ this.#id = id;
+ }
+
+ // ...
+ }
+```
+
+### 8.5. வகுப்பு கன்ஸ்ட்ரக்டர்களை (class constructors) விளக்குக
+
+**பதில்:** கன்ஸ்ட்ரக்டர் என்பது அந்த வகுப்பின் துவக்கத்தில் (initialization) அழைக்கப்பட்ட ஒரு வகுப்பின் (class) சிறப்பு முறையாகும். பொருளின் பண்புகளைத் துவக்குவதற்கும் பொருள் (object) உருவாக்கப்படும்போது தேவையான அமைப்பைச் (setup) செய்வதற்கும் இது பயன்படுகிறது.
+
+ + i. அறிவிப்பு (Declaration)
+ - கன்ஸ்ட்ரக்டர் முறையானது கிளாஸ் பாடிக்குள் (class body) ```constructor``` முக்கியச்சொல்லைப் (keyword) பயன்படுத்தி அறிவிக்கப்படுகிறது.
+ - ஒவ்வொரு வகுப்பிலும் ஒரு கன்ஸ்ட்ரக்டர் முறை மட்டுமே இருக்கும்.
+ - கன்ஸ்ட்ரக்டர் ஒரு ஒத்திசைவற்ற முறையாக (async method) இருக்க முடியாது.
+ - கன்ஸ்ட்ரக்டர் ஒரு தனிப்பட்ட முறையாக (private method) இருக்க முடியாது.
+ + ii. துவக்கம் (Initialization)
+ - நிகழ்வின் பண்புகளைத் (instance's properties) துவக்கப் பயன்படும் அளவுருக்களைக் (parameters) கன்ஸ்ட்ரக்டர் ஏற்க முடியும்.
+ - பண்புகளுக்கு (properties) மதிப்புகளை ஒதுக்குவதன் மூலம் இது ஆரம்ப நிலையை (initial state) அமைக்கிறது.
+ + iii. பரம்பரை (Inheritance)
+ - பெறப்பட்ட வகுப்புகளில் (derived classes - மற்றொரு வகுப்பை நீட்டிக்கும் வகுப்புகள்), பெற்றோர் (parent) வகுப்பின் கன்ஸ்ட்ரக்டரை அழைக்க குழந்தையின் (child) கன்ஸ்ட்ரக்டருக்குள் ```super``` முக்கியச்சொல் (keyword) பயன்படுத்தப்படுகிறது.
+ - பெறப்பட்ட (derived) வகுப்பின் கன்ஸ்ட்ரக்டரில் எந்தப் பண்புகளையும் அணுகுவதற்கு முன் ```super``` அழைப்பு செய்யப்பட வேண்டும். கன்ஸ்ட்ரக்டர் பரம்பரையின் (constructor inheritance) எடுத்துக்காட்டு:
+
+ ```javascript
+ class Animal {
+ constructor(species) {
+ this.species = species;
+ }
+ }
+
+ class Person extends Animal {
+ constructor(name) {
+ super("Human"); // Call the parent class constructor
+ this.name = name;
+ }
+ }
+ ```
+ + iv. இயல்புநிலை கன்ஸ்ட்ரக்டர் (Default constructor) - கன்ஸ்ட்ரக்டர் வெளிப்படையாக அறிவிக்கப்படவில்லை என்றால், ஒரு இயல்புநிலை கன்ஸ்ட்ரக்டர் வகுப்பிற்குக் கொடுக்கப்படும்.
+ - அடிப்படை வகுப்பு (Base class) - வகுப்பு வேறு எந்த வகுப்பையும் நீட்டிக்கவில்லை (extend) என்றால், அதற்கு ஒரு இயல்புநிலைக் கன்ஸ்ட்ரக்டர் ஒதுக்கப்படும்:
+ ```javascript
+ constructor() {}
+ ```
+ - குழந்தை வகுப்பு (Child class) - ஒரு வகுப்பு மற்றொரு வகுப்பை நீட்டித்தால் (extends), அதன் கன்ஸ்ட்ரக்டரைப் பெற்றிருக்கும் (inherit)
+ ```javascript
+ class Vehicle {
+ constructor(type) {
+ this.type = type;
+ }
+
+ move() {
+ return `The ${this.type} is moving`;
+ }
+ }
+
+ class Car extends Vehicle {
+ #model;
+
+ set model(model) {
+ this.#model = model;
+ }
+
+ drive() {
+ `Driving ${this.#model}`;
+ }
+ }
+ ```
+ கன்ஸ்ட்ரக்டர் வெளிப்படையாக (explicitly) அறிவிக்கப்படவில்லை என்றாலும், Car வகுப்பு அதை Vehicle வகுப்பிலிருந்து பெறுகிறது:
+ ```javascript
+ constructor(type) {
+ super(type);
+ }
+ ```
+
+### 8.6. நிலையான உறுப்பினர்கள் (Static members) vs நிகழ்வு உறுப்பினர்கள் (Instance members)
+
+**பதில்:** முன்னிருப்பாக, நாம் ஒரு வகுப்பிற்குள் (class) வரையறுக்கும் பண்புகள் (properties) மற்றும் முறைகள் (methods) நாம் உருவாக்கும் வகுப்பின் ஒவ்வொரு நிகழ்விற்கும் (instance) சொந்தமானது. நாம் வகுப்பிற்கு உறுப்பினர்களையும் ஒதுக்கலாம். இத்தகைய உறுப்பினர்கள் நிலையானவை (static) என்று அழைக்கப்படுகின்றன மற்றும் அவை ```static``` முக்கியச்சொல்லைப் பயன்படுத்தி அறிவிக்கப்படுகின்றன. வகுப்பின் நிகழ்வுகளில் (instances) அவற்றை நேரடியாக அணுக முடியாது.
\ No newline at end of file
diff --git a/ta/json.md b/ta/json.md
new file mode 100644
index 00000000..b564a1d9
--- /dev/null
+++ b/ta/json.md
@@ -0,0 +1,45 @@
+---
+layout: editorial
+chapter: 11
+pageNumber: 82
+description: JSON (JavaScript Object Notation) என்பது வெவ்வேறு அமைப்புகள் (systems) மற்றும் இயங்குதளங்களுக்கு (platforms) இடையே தரவைப் பிரதிநிதித்துவப்படுத்தவும் பரிமாறவும் பயன்படும் ஒரு இலகுரக (lightweight) தரவு பரிமாற்ற வடிவமாகும். இணைய மேம்பாட்டில் தரவு பரிமாற்றம் மற்றும் சேமிப்பிற்காக இது பரவலாகப் பயன்படுத்தப்படுகிறது.
+---
+
+# அத்தியாயம் 11
+# JSON
+
+**J**ava**S**cript **O**bject **N**otation (JSON) என்பது தரவைச் சேமிப்பதற்கும் கொண்டு செல்வதற்குமான உரை அடிப்படையிலான (text-based) வடிவமாகும். ஜாவாஸ்கிரிப்ட் பொருள்களை எளிதில் JSON ஆக மாற்றலாம், மற்றும் நேர்மாறாகவும் மாற்றலாம். எடுத்துக்காட்டாக:
+
+```javascript
+// ஒரு ஜாவாஸ்கிரிப்ட் பொருள்
+let myObj = { name:"Ryan", age:30, city:"Austin" };
+
+// JSON ஆக மாற்றப்பட்டது:
+let myJSON = JSON.stringify(myObj);
+console.log(myJSON);
+// முடிவு: '{"name":"Ryan","age":30,"city":"Austin"}'
+
+// மீண்டும் ஜாவாஸ்கிரிப்ட் பொருளாக மாற்றப்பட்டது
+let originalJSON = JSON.parse(myJSON);
+console.log(originalJSON);
+
+// முடிவு: {name: 'Ryan', age: 30, city: 'Austin'}
+```
+
+`stringify` மற்றும் `parse` ஆகியவை JSON ஆதரிக்கும் இரண்டு முறைகளாகும்.
+
+| முறை (Method) | விளக்கம் (Description) |
+| ------------- | ------------------------------------------------------ |
+| `parse()` | பாகுபடுத்தப்பட்ட (parsed) JSON சரத்திலிருந்து ஜாவாஸ்கிரிப்ட் பொருளைத் திரும்பப் பெறுகிறது |
+| `stringify()` | ஜாவாஸ்கிரிப்ட் பொருளிலிருந்து JSON சரத்தைத் திரும்பப் பெறுகிறது |
+
+JSON ஆல் பின்வரும் தரவு வகைகள் (data types) ஆதரிக்கப்படுகின்றன.
+
+* [string (சரம்)](./strings/README.md)
+* [number (எண்)](./numbers/README.md)
+* [array (வரிசை)](./arrays/README.md)
+* [boolean (பூலியன்)](./basics/types.md#Boolean)
+* செல்லுபடியாகும் JSON மதிப்புகளைக் கொண்ட [object (பொருள்)](./basics/types.md#Object)
+* [null](./basics/types.md#NULL)
+
+அது `function`, `date` அல்லது `undefined` ஆக இருக்க முடியாது.
diff --git a/ta/loops/README.md b/ta/loops/README.md
new file mode 100644
index 00000000..6356fd2d
--- /dev/null
+++ b/ta/loops/README.md
@@ -0,0 +1,36 @@
+---
+layout: editorial
+chapter: 7
+pageNumber: 62
+description: Loops ஒரு குறிப்பிட்ட நிபந்தனை நிறைவேற்றப்படும் வரை ஒரு குறியீட்டுத் தொகுதியை மீண்டும் மீண்டும் இயக்க அனுமதிக்கும் கட்டுப்பாட்டு அமைப்புகளாகும். வரிசைகள் மற்றும் சரங்கள் போன்ற தரவு கட்டமைப்புகளில் மீண்டும் மீண்டும் செய்யப்படும் பணிகளை தானியக்கமாக்குவதற்கும் மீண்டும் செய்வதற்கும் அவை அவசியம்.
+---
+
+# அத்தியாயம் 7
+# சுழல்கள் (Loops)
+
+சுழல்கள் என்பது மீண்டும் மீண்டும் செய்யப்படும் வழிமுறைகளாகும், இதில் சுழற்சியில் உள்ள ஒரு மாறி மாறுகிறது. நீங்கள் அதே குறியீட்டை மீண்டும் மீண்டும் இயக்க விரும்பினால், ஒவ்வொரு முறையும் வெவ்வேறு மதிப்புடன் சுழல்கள் கைக்கு வரும்.
+
+இப்படி எழுதுவதற்குப் பதிலாக:
+
+```javascript
+doThing(cars[0]);
+doThing(cars[1]);
+doThing(cars[2]);
+doThing(cars[3]);
+doThing(cars[4]);
+```
+
+நீங்கள் இப்படி எழுதலாம்:
+
+```javascript
+for (var i = 0; i < cars.length; i++) {
+ doThing(cars[i]);
+}
+```
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளைப் பற்றி விவாதிக்கப் போகிறோம்:
+* [For](./for.md)
+* [While](./while.md)
+* [Do...While](./dowhile.md)
+* [Continue](./continue.md)
+* [Break](./break.md)
\ No newline at end of file
diff --git a/ta/loops/break.md b/ta/loops/break.md
new file mode 100644
index 00000000..4a72b9c7
--- /dev/null
+++ b/ta/loops/break.md
@@ -0,0 +1,56 @@
+---
+chapter: 7
+pageNumber: 54
+description: ஒரு குறிப்பிட்ட நிபந்தனை நிறைவேற்றப்படும் போதெல்லாம் ஒரு சுழற்சியில் இருந்து வெளியேற ஒரு பிரேக் அறிக்கை பயன்படுத்தப்படுகிறது.
+---
+
+## Break
+
+சுழற்சிக்காக குறிப்பிடப்பட்ட நிபந்தனை `false` ஆக மாறும்போது சுழற்சி முடிவடைகிறது. இருப்பினும், break அறிக்கையைப் பயன்படுத்துவதன் மூலம் நாம் எந்த சுழற்சியையும் கட்டாயமாக முடிக்க முடியும்.
+
+### தொடரியல்
+
+ஜாவாஸ்கிரிப்டில் `break` இன் தொடரியல் கீழே கொடுக்கப்பட்டுள்ளது:
+
+```javascript
+for (initialization; endCondition; change) {
+ if(conditionForBreaking){
+ break;
+ }
+}
+```
+
+### விளக்கம்:
+
+- for சுழற்சியின் உள்ளே `conditionForBreaking` நிபந்தனை பூர்த்தி செய்யப்படும் போதெல்லாம் கட்டுப்பாடு for சுழற்சிக்கு வெளியே சென்று சுழற்சி முடிவடைகிறது.
+
+
+### எடுத்துக்காட்டு
+
+- நம்மிடம் எண்களின் வரிசை உள்ளது என்று வைத்துக்கொள்வோம், 5 ஆல் வகுபடும் எண்ணின் முதல் நிகழ்வை அச்சிட வேண்டும். இதைச் செய்ய `break` அறிக்கையைப் பயன்படுத்தலாம்:
+
+```javascript
+const arr = [4, 7, 9, 11, 45, 23, 15, 87];
+
+for(let i = 0; i < arr.length; i++){
+ if(arr[i]%5 == 0){
+ console.log(arr[i]);
+ break;
+ }
+}
+// இந்தக் குறியீடு 45 ஐ அச்சிடும், இது 5 ஆல் வகுபடும் முதல் எண்ணாகும்
+```
+- `while` சுழற்சியின் உள்ளேயும் Break அறிக்கையைப் பயன்படுத்தலாம்.
+
+```javascript
+const arr = [4, 7, 9, 11, 45, 23, 15, 87];
+let i = 0;
+while(i < arr.length){
+ if(arr[i]%5 == 0){
+ console.log(arr[i]);
+ break;
+ }
+ i++;
+}
+// இந்தக் குறியீடும் 45 ஐ அச்சிடும், இது 5 ஆல் வகுபடும் முதல் எண்ணாகும்
+```
diff --git a/ta/loops/continue.md b/ta/loops/continue.md
new file mode 100644
index 00000000..a3c99828
--- /dev/null
+++ b/ta/loops/continue.md
@@ -0,0 +1,22 @@
+---
+title: Continue
+description: ஒரு எடுத்துக்காட்டுடன் ஜாவாஸ்கிரிப்டில் உள்ள continue அறிக்கை பற்றிய விளக்கம்.
+---
+
+# Continue
+
+ஜாவாஸ்கிரிப்டில் உள்ள `continue` அறிக்கை என்பது ஒரு சுழற்சியின் தற்போதைய மறு செய்கையைத் தவிர்த்து, அடுத்த மறு செய்கையுடன் தொடரப் பயன்படுத்தப்படும் ஒரு கட்டுப்பாட்டு ஓட்ட அறிக்கையாகும். இது சில நிபந்தனைகளின் கீழ் ஒரு சுழற்சியின் உள்ளே இருக்கும் குறிப்பிட்ட குறியீட்டைக் கடந்து செல்ல உங்களை அனுமதிக்கிறது. இந்த ஆவணம் ஜாவாஸ்கிரிப்டில் உள்ள `continue` அறிக்கை, அதன் தொடரியல், பொதுவான பயன்பாட்டு வழக்குகள் மற்றும் சிறந்த நடைமுறைகள் பற்றிய கண்ணோட்டத்தை வழங்குகிறது.
+
+## தொடரியல்
+
+ஜாவாஸ்கிரிப்டில், சுழல்களுக்குள் `continue` அறிக்கை பயன்படுத்தப்படுகிறது. தொடரியல் நேரடியானது:
+
+```javascript
+for (let i = 1; i <= 5; i++) {
+ if (i === 3) {
+ console.log("3 ஐ தவிர்க்கிறது.");
+ continue;
+ }
+ console.log(`i இன் தற்போதைய மதிப்பு: ${i}`);
+}
+```
diff --git a/ta/loops/dowhile.md b/ta/loops/dowhile.md
new file mode 100644
index 00000000..7ee85f2b
--- /dev/null
+++ b/ta/loops/dowhile.md
@@ -0,0 +1,26 @@
+---
+chapter: 7
+pageNumber: 67
+description: do...while அறிக்கை, சோதனை நிபந்தனை தவறு என மதிப்பிடப்படும் வரை ஒரு குறிப்பிட்ட தொகுதி அறிக்கையை இயக்கும் ஒரு சுழற்சியை உருவாக்குகிறது. தொகுதியை இயக்கிய பின்னரே நிபந்தனை மதிப்பிடப்படுகிறது.
+---
+# Do...While
+
+`do...while` அறிக்கை, சோதனை நிபந்தனை தவறு என மதிப்பிடப்படும் வரை ஒரு குறிப்பிட்ட தொகுதி அறிக்கையை இயக்கும் ஒரு சுழற்சியை உருவாக்குகிறது. தொகுதியை இயக்கிய பின்னரே நிபந்தனை மதிப்பிடப்படுகிறது. `do... while` க்கான தொடரியல்:
+
+```javascript
+do {
+ // அறிக்கை
+} while (expression);
+```
+
+எடுத்துக்காட்டாக, `do...while` சுழற்சியைப் பயன்படுத்தி 10-க்கும் குறைவான எண்களை எவ்வாறு அச்சிடுவது என்று பார்ப்போம்:
+
+```javascript
+var i = 0;
+do {
+ document.write(i + " ");
+ i++; // i ஐ 1 ஆல் அதிகரித்தல்
+} while (i < 10);
+```
+
+> _**குறிப்பு**_: `i = i + 1` என்பதை `i++` என்று எழுதலாம்.
diff --git a/ta/loops/for.md b/ta/loops/for.md
new file mode 100644
index 00000000..d8a13deb
--- /dev/null
+++ b/ta/loops/for.md
@@ -0,0 +1,176 @@
+---
+chapter: 7
+pageNumber: 63
+description: for சுழற்சி என்பது ஒரு குறிப்பிட்ட எண்ணிக்கையிலான முறை அல்லது ஒரு வரையறுக்கப்பட்ட வரம்பில் ஒரு குறியீட்டுத் தொகுதியை பல முறை இயக்கப் பயன்படுத்தப்படும் ஒரு சக்திவாய்ந்த கட்டுப்பாட்டு அமைப்பு. இது மிகவும் பல்துறை மற்றும் பொதுவாக வரிசைகள், சரங்கள் மற்றும் பிற மீண்டும் மீண்டும் செய்யக்கூடிய பொருள்களை மீண்டும் செய்யப் பயன்படுத்தப்படுகிறது.
+---
+
+## For
+
+சுழற்சியின் எளிதான வடிவம் `for` அறிக்கை. இது ஒரு if அறிக்கைக்கு ஒத்த தொடரியலைக் கொண்டுள்ளது, ஆனால் அதிக விருப்பங்களுடன்:
+
+### தொடரியல்
+
+ஜாவாஸ்கிரிப்டில் `for` சுழற்சியின் தொடரியல் கீழே கொடுக்கப்பட்டுள்ளது:
+
+```javascript
+for (initialization; end condition; change) {
+ // இதை செய், இப்போது செய்
+}
+```
+
+### விளக்கம்:
+
+- முதல் மறு செய்கைக்கு முன் செயல்படுத்தப்படும் `initialization` பகுதியில், உங்கள் சுழற்சி மாறியைத் தொடங்குங்கள்.
+- `end condition` பகுதியில், ஒவ்வொரு மறு செய்கைக்கும் முன் சரிபார்க்கப்படக்கூடிய ஒரு நிபந்தனையை வைக்கவும். நிபந்தனை `false` ஆக மாறும் தருணத்தில், சுழற்சி முடிவடையும்.
+- `change` பகுதியில், சுழற்சி மாறியை எவ்வாறு புதுப்பிப்பது என்பதை நிரலுக்குச் சொல்லுங்கள்.
+ `for` சுழற்சியைப் பயன்படுத்தி அதே குறியீட்டை பத்து முறை எவ்வாறு இயக்குவது என்று பார்ப்போம்:
+
+```javascript
+for (let i = 0; i < 10; i = i + 1) {
+ // இந்தக் குறியீட்டை பத்து முறை செய்
+}
+```
+
+> _**குறிப்பு**_: `i = i + 1` என்பதை `i++` என்று எழுதலாம்.
+
+## `for...in` சுழற்சி
+
+ஒரு பொருளின் எண்ணக்கூடிய பண்புகள் மூலம் சுழற்சி செய்ய `for in` சுழற்சியைப் பயன்படுத்தலாம். ஒவ்வொரு தனித்துவமான பண்புக்கும், ஜாவாஸ்கிரிப்ட் குறிப்பிட்ட அறிக்கைகளை இயக்குகிறது.
+
+### தொடரியல்
+
+```javascript
+for (variable in object) {
+ // பொருளில் உள்ள ஒவ்வொரு பண்பையும் மீண்டும் செய்யவும்
+}
+```
+
+### எடுத்துக்காட்டு
+
+எங்களிடம் பின்வரும் பொருள் உள்ளது என்று வைத்துக்கொள்வோம்:
+
+```javascript
+const person = {
+ fname: "John",
+ lname: "Doe",
+ age: 25,
+};
+```
+
+பின்னர், `for in` சுழற்சியின் உதவியுடன், கீழே காட்டப்பட்டுள்ளபடி `fname`, `lname` மற்றும் `age` போன்ற அதன் பண்புகளை அணுக `person` பொருளை நாம் மீண்டும் செய்யலாம்.
+
+```javascript
+let info = "";
+for (let x in person) {
+ console.log(person[x]);
+}
+```
+
+மேலே உள்ள குறியீட்டுத் துணுக்கின் வெளியீடு பின்வருமாறு:
+
+```javascript
+John
+Doe
+25
+```
+
+> **குறிப்பு: `Arrays`, `Strings`, `Maps`, `NodeLists` போன்ற மீண்டும் செய்யக்கூடிய பொருள்களை `for in` அறிக்கையைப் பயன்படுத்தி சுழற்சி செய்யலாம். **
+
+```javascript
+// வரிசைகளுடன் எடுத்துக்காட்டு
+const myArray = [1, 2, 3, 4, 5];
+for (const item of myArray) {
+ console.log(item);
+}
+
+// சரங்களுடன் எடுத்துக்காட்டு
+const myString = "Hello, World!";
+for (const char of myString) {
+ console.log(char);
+}
+
+// Maps உடன் எடுத்துக்காட்டு
+const myMap = new Map();
+myMap.set("name", "John");
+myMap.set("age", 30);
+
+for (const [key, value] of myMap) {
+ console.log(key, value);
+}
+
+// NodeLists (HTML கூறுகள்) உடன் எடுத்துக்காட்டு
+const paragraphs = document.querySelectorAll("p");
+for (const paragraph of paragraphs) {
+ console.log(paragraph.textContent);
+}
+```
+
+## `for...of` சுழற்சி
+
+`for...of` சுழற்சி **[JavaScript ES6](../es6-concepts/README.md)** இன் பிந்தைய பதிப்புகளில் அறிமுகப்படுத்தப்பட்டது. `for...of` அறிக்கை, `Array`, `String`, `TypedArray`, `Map`, `Set`, `NodeList` (மற்றும் பிற DOM சேகரிப்புகள்) போன்ற மீண்டும் செய்யக்கூடிய பொருள்களிலிருந்து பெறப்பட்ட மதிப்புகளின் வரிசையில் செயல்படும் ஒரு சுழற்சியை இயக்குகிறது.
+
+### தொடரியல்
+
+`for...of` சுழற்சியின் தொடரியல்:
+
+```javascript
+for (element of iterable) {
+ // for...of இன் உடல்
+}
+```
+
+இங்கே,
+
+- **iterable** - மீண்டும் செய்யக்கூடிய ஒரு பொருள்
+- **element** - மீண்டும் செய்யக்கூடியதில் உள்ள உருப்படிகள்
+
+எளிய தமிழில், மேற்கண்ட குறியீட்டை நீங்கள் இவ்வாறு படிக்கலாம்: “மீண்டும் செய்யக்கூடிய ஒவ்வொரு உறுப்புக்கும், சுழற்சியின் உடலை இயக்கவும்”.
+
+### எடுத்துக்காட்டுகள்
+
+எங்களிடம் பின்வரும் பொருள் உள்ளது என்று வைத்துக்கொள்வோம்:
+
+```javascript
+const person = ["John Doe", "Albert", "Neo"];
+```
+
+பின்னர், `for of` சுழற்சியின் உதவியுடன், கீழே காட்டப்பட்டுள்ளபடி அதன் தனிப்பட்ட உறுப்பை அணுக `person` பொருளை நாம் மீண்டும் செய்யலாம்.
+
+```javascript
+let info = "";
+for (let x of person) {
+ console.log(x);
+}
+```
+
+மேலே உள்ள குறியீட்டுத் துணுக்கின் வெளியீடு பின்வருமாறு:
+
+```javascript
+John Doe
+Albert
+Neo
+```
+
+சரம், maps மற்றும் nodelist உடன் `for...of` சுழற்சியின் பயன்பாடு கீழே கொடுக்கப்பட்டுள்ளது:
+
+```js
+// சரங்களுடன் எடுத்துக்காட்டு
+const text = "Hello, World!";
+for (const char of text) {
+ console.log(char);
+}
+
+// Maps உடன் எடுத்துக்காட்டு
+const person = new Map();
+person.set("name", "John");
+person.set("age", 30);
+for (const [key, value] of person) {
+ console.log(key, value);
+}
+
+// NodeLists (HTML கூறுகள்) உடன் எடுத்துக்காட்டு
+const paragraphs = document.querySelectorAll("p");
+for (const paragraph of paragraphs) {
+ console.log(paragraph.textContent);
+}
+```
diff --git a/ta/loops/while.md b/ta/loops/while.md
new file mode 100644
index 00000000..5b3bf3e3
--- /dev/null
+++ b/ta/loops/while.md
@@ -0,0 +1,29 @@
+---
+chapter: 7
+pageNumber: 66
+description: While சுழல்கள் ஒரு குறிப்பிட்ட நிபந்தனை உண்மையாக இருக்கும் வரை ஒரு குறியீட்டுத் தொகுதியை மீண்டும் மீண்டும் இயக்குகின்றன.
+---
+# While
+
+`while` சுழல்கள் ஒரு குறிப்பிட்ட நிபந்தனை உண்மையாக இருக்கும் வரை ஒரு குறியீட்டுத் தொகுதியை மீண்டும் மீண்டும் இயக்குகின்றன. மீண்டும் மீண்டும் செய்யப்படும் பணிகளை தானியக்கமாக்குவதற்கும் நிபந்தனையின் மதிப்பீட்டின் அடிப்படையில் மறு செய்கைகளைச் செய்வதற்கும் இது ஒரு வழியை வழங்குகிறது.
+
+```javascript
+while (condition) {
+ // நிபந்தனை உண்மையாக இருக்கும் வரை இதை செய்
+}
+```
+
+எடுத்துக்காட்டாக, இந்த எடுத்துக்காட்டில் உள்ள சுழற்சி, மாறி `i` `5` ஐ விடக் குறைவாக இருக்கும் வரை அதன் குறியீட்டுத் தொகுதியை மீண்டும் மீண்டும் இயக்கும்:
+
+```javascript
+var i = 0,
+x = "";
+while (i < 5) {
+ x = x + "எண்: " + i;
+ i++;
+}
+```
+
+{% hint style="working" %}
+நிபந்தனை எப்போதும் உண்மையாக இருந்தால் முடிவிலா சுழற்சியைத் தவிர்க்க கவனமாக இருங்கள்!
+{% endhint %}
diff --git a/ta/miscellaneous/ECMA-script.md b/ta/miscellaneous/ECMA-script.md
new file mode 100644
index 00000000..c3c81465
--- /dev/null
+++ b/ta/miscellaneous/ECMA-script.md
@@ -0,0 +1,109 @@
+---
+chapter: 19
+pageNumber: 136
+description: இந்த மார்க்டவுன் ஆவணம் ECMAScript, அதன் வரலாறு, அம்சங்கள் மற்றும் இணைய மேம்பாட்டில் அதன் பங்கு பற்றிய கண்ணோட்டத்தை வழங்குகிறது.
+---
+
+# ECMAScript (ES)
+
+ECMAScript, பொதுவாக ES என்று சுருக்கமாக அழைக்கப்படுகிறது, இது ஒரு தரப்படுத்தப்பட்ட ஸ்கிரிப்டிங் மொழி விவரக்குறிப்பு (standardized scripting language specification) ஆகும். இது பல நிரலாக்க மொழிகளுக்கான அடித்தளமாகச் செயல்படுகிறது, ஜாவாஸ்கிரிப்ட் மிகவும் பிரபலமான மற்றும் பரவலாகப் பயன்படுத்தப்படும் செயலாக்கமாகும். இந்த மார்க்டவுன் ஆவணம் (Markdown document) ECMAScript, அதன் வரலாறு, அம்சங்கள் மற்றும் இணைய மேம்பாட்டில் அதன் பங்கு பற்றிய கண்ணோட்டத்தை வழங்குகிறது.
+
+## ECMAScript என்றால் என்ன?
+
+- **தரப்படுத்தப்பட்ட மொழி (Standardized Language)**: ECMAScript என்பது ECMA International ஆல் பராமரிக்கப்படும் ஒரு தரப்படுத்தப்பட்ட ஸ்கிரிப்டிங் மொழி விவரக்குறிப்பாகும். நிலைத்தன்மை மற்றும் இயங்குதன்மை (consistency and interoperability) ஆகியவற்றை உறுதி செய்வதற்காக மொழியின் தொடரியல் (syntax) மற்றும் சொற்பொருளை (semantics) இது வரையறுக்கிறது.
+
+- **ஜாவாஸ்கிரிப்ட் செயலாக்கம் (JavaScript Implementation)**: ஜாவாஸ்கிரிப்ட் என்பது ECMAScript இன் மிக முக்கியமான செயலாக்கமாகும், ஆனால் ActionScript போன்ற பிற மொழிகளும் இந்த விவரக்குறிப்பை அடித்தளமாகப் பயன்படுத்துகின்றன.
+
+## ECMAScript இன் வரலாறு
+
+- **ES1 (ECMAScript 1)**: 1997 இல் வெளியிடப்பட்டது. ஜாவாஸ்கிரிப்ட்டிற்கு அடித்தளம் அமைத்தது.
+- **ES2 (ECMAScript 2)**: 1998 இல் வெளியிடப்பட்டது. ISO/IEC 16262 உடன் சீரமைக்கச் சிறிய தலையங்க மாற்றங்கள் (Minor editorial changes).
+- **ES3 (ECMAScript 3)**: 1999 இல் வெளியிடப்பட்டது. வழக்கமான கோவைகள் (regular expressions), `try/catch` விதிவிலக்கு கையாளுதல் (exception handling) மற்றும் `do/while` சுழல்கள் (loops) போன்ற குறிப்பிடத்தக்க மேம்பாடுகளை அறிமுகப்படுத்தியது.
+- **ES5 (ECMAScript 5)**: 2009 இல் வெளியிடப்பட்டது. `strict mode`, `JSON` ஆதரவு, `Object.create()`, `Object.defineProperty()` மற்றும் வரிசை முறைகள் (`map`, `filter`, `reduce`) போன்ற புதிய அம்சங்கள் சேர்க்கப்பட்டன.
+- **ES6 (ECMAScript 2015)**: 2015 இல் வெளியிடப்பட்டது. அம்பு செயல்பாடுகள் (arrow functions), வகுப்புகள் (classes), தொகுதிகள் (modules), டெம்ப்ளேட் லிட்டரல்கள், டிஸ்ட்ரக்சரிங், `let`/`const`, `for...of` சுழல்கள், பிராமிஸ்கள் மற்றும் `Symbol` ஆகியவற்றுடன் முக்கிய மைல்கல்.
+- **ES7 (ECMAScript 2016)**: 2016 இல் வெளியிடப்பட்டது. `Array.prototype.includes()` மற்றும் அடுக்குக்குறியீடு ஆபரேட்டர் (exponentiation operator) (`**`) அறிமுகப்படுத்தப்பட்டது.
+- **ES8 (ECMAScript 2017)**: 2017 இல் வெளியிடப்பட்டது. `async/await`, `Object.values()`, `Object.entries()`, `Object.getOwnPropertyDescriptors()` மற்றும் சரம் திணிப்பு (string padding) (`padStart`/`padEnd`) சேர்க்கப்பட்டது.
+- **ES9 (ECMAScript 2018)**: 2018 இல் வெளியிடப்பட்டது. பொருட்களுக்கான (objects) ரெஸ்ட்/ஸ்ப்ரெட் (rest/spread) பண்புகள் (properties), `Promise.prototype.finally()` மற்றும் ஒத்திசைவற்ற மறு செய்கை (asynchronous iteration) அறிமுகப்படுத்தப்பட்டது.
+- **ES10 (ECMAScript 2019)**: 2019 இல் வெளியிடப்பட்டது. `Array.prototype.flat()`, `Array.prototype.flatMap()`, `Object.fromEntries()`, `String.prototype.trimStart()`, `String.prototype.trimEnd()` மற்றும் `Symbol.prototype.description` சேர்க்கப்பட்டது.
+- **ES11 (ECMAScript 2020)**: 2020 இல் வெளியிடப்பட்டது. `BigInt`, `Promise.allSettled()`, `globalThis`, விருப்பச் சங்கிலி (optional chaining) (`?.`) மற்றும் நல்யிஷ் கோலேஸிங் ஆபரேட்டர் (nullish coalescing operator) (`??`) அறிமுகப்படுத்தப்பட்டது.
+- **ES12 (ECMAScript 2021)**: 2021 இல் வெளியிடப்பட்டது. `String.prototype.replaceAll()`, `Promise.any()`, `AggregateError`, தருக்க ஒதுக்கீட்டு ஆபரேட்டர்கள் (logical assignment operators) (`&&=`, `||=`, `??=`) மற்றும் `WeakRefs` சேர்க்கப்பட்டது.
+- **ES13 (ECMAScript 2022)**: 2022 இல் வெளியிடப்பட்டது. உயர்மட்ட `await`, `Object.hasOwn()`, `Error.cause`, `Array`, `String` மற்றும் `TypedArray` ஆகியவற்றிற்கான `at()` முறை மற்றும் தனிப்பட்ட வகுப்புப் புலங்கள்/முறைகளை (private class fields/methods) அறிமுகப்படுத்தியது.
+- **ES14 (ECMAScript 2023)**: 2023 இல் வெளியிடப்பட்டது. `Array.prototype.toReversed()`, `Array.prototype.toSorted()`, `Array.prototype.toSpliced()`, `Array.prototype.with()` மற்றும் `Symbol.prototype.description` ஆகியவை கெட்டராகச் (getter) சேர்க்கப்பட்டது.
+
+# ECMAScript (ES) ஜாவாஸ்கிரிப்ட்டுக்கு ஏன் தரப்படுத்தப்பட்டுள்ளது (Why ECMAScript (ES) is Standardized for JavaScript)
+
+ஜாவாஸ்கிரிப்ட்டுக்கு ECMAScript ஏன் முக்கியமானது, தரப்படுத்தலில் அதன் பங்கு மற்றும் மொழிக்கான அதன் நன்மைகள் பற்றி ஆவணத்தின் இந்தப் பகுதி விவரிக்கிறது.
+
+## தரப்படுத்தலின் தேவை (The Need for Standardization)
+
+- **மொழி நிலைத்தன்மை (Language Consistency)**: ஜாவாஸ்கிரிப்ட், இணைய மேம்பாட்டிற்குப் பரவலாகப் பயன்படுத்தப்படும் நிரலாக்க மொழியாக இருப்பதால், பல்வேறு செயலாக்கங்கள் (implementations) மற்றும் சூழல்களில் (environments) நிலைத்தன்மையை உறுதி செய்ய ஒரு தரப்படுத்தப்பட்ட விவரக்குறிப்பு தேவைப்பட்டது.
+
+- **இயங்குதன்மை (Interoperability)**: வெவ்வேறு இணைய உலாவிகள் (web browsers) மற்றும் இயந்திரங்கள் ஜாவாஸ்கிரிப்ட்டின் சொந்த விளக்கங்களைக் கொண்டிருக்கலாம். அனைத்து தளங்களிலும் (platforms) ஜாவாஸ்கிரிப்ட் குறியீடு சீராகச் செயல்படுவதை உறுதிசெய்ய ஒரு தரநிலை உதவுகிறது.
+
+## ECMAScript இன் பங்கு (The Role of ECMAScript)
+
+- **மொழியை வரையறுத்தல் (Defining the Language)**: ECMAScript அதன் தொடரியல் (syntax), தரவு வகைகள் (data types), செயல்பாடுகள் (functions) மற்றும் அடிப்படைப் பொருள்கள் (fundamental objects) உள்ளிட்ட ஜாவாஸ்கிரிப்ட்டின் முக்கிய அம்சங்களை வரையறுக்கிறது.
+
+- **தரநிலைப்படுத்தல் அமைப்பு (Standardization Body)**: ECMAScript ஆனது தரநிலை அமைப்பான ECMA International (European Computer Manufacturers Association) மூலம் பராமரிக்கப்பட்டு உருவாக்கப்படுகிறது. இந்த அமைப்பு ஜாவாஸ்கிரிப்ட் ஒரு நன்கு வரையறுக்கப்பட்ட மற்றும் நிலையான மொழியாக இருப்பதை உறுதி செய்கிறது.
+
+- **பதிப்பு பரிணாமம் (Version Evolution)**: ECMAScript நவீன இணைய மேம்பாட்டின் தேவைகளுடன் ஜாவாஸ்கிரிப்ட்டைப் புதுப்பித்து வைத்து, ஒவ்வொரு புதிய பதிப்பிலும் புதிய மொழி அம்சங்களையும் மேம்பாடுகளையும் அறிமுகப்படுத்துகிறது.
+
+## ECMAScript தரநிலைப்படுத்தலின் நன்மைகள் (Benefits of ECMAScript Standardization)
+
+- **நிலைத்தன்மை (Consistency)**: தரப்படுத்தல் ஜாவாஸ்கிரிப்ட் வெவ்வேறு தளங்கள் மற்றும் உலாவிகளில் தொடர்ந்து செயல்படுவதை உறுதிசெய்கிறது, இணக்கத்தன்மை (compatibility) சிக்கல்களைக் குறைக்கிறது.
+
+- **இயங்குதன்மை (Interoperability)**: டெவலப்பர்கள் ஜாவாஸ்கிரிப்ட் குறியீட்டைப் பல்வேறு சூழல்களில் உத்தேசித்துள்ளபடி செயல்படும் என்பதை அறிந்து, நம்பிக்கையுடன் எழுதலாம்.
+
+- **புதுமை (Innovation)**: ECMAScript இன் தற்போதைய வளர்ச்சி புதிய மொழி அம்சங்கள் மற்றும் மேம்பாடுகளை அறிமுகப்படுத்த அனுமதிக்கிறது, எப்போதும் மாறிவரும் இணைய நிலப்பரப்புடன் (web landscape) ஜாவாஸ்கிரிப்ட் உருவாக உதவுகிறது.
+
+- **குறுக்கு-தளம் மேம்பாடு (Cross-Platform Development)**: தரநிலைப்படுத்தல், டெவலப்பர்கள் கிளையண்ட் (client) மற்றும் சர்வர்-பக்க (server-side) சூழல்கள் இரண்டிலும் வேலை செய்யும் குறியீட்டை எழுதுவதை எளிதாக்குகிறது.
+
+## ஜாவாஸ்கிரிப்ட் செயலாக்கங்கள் (JavaScript Implementations)
+
+- **முக்கிய உலாவிகள் (Major Browsers)**: Chrome, Firefox, Safari மற்றும் Edge போன்ற பிரபலமான வலை உலாவிகள் (web browsers) ஜாவாஸ்கிரிப்ட் குறியீட்டை இயக்க ECMAScript ஐச் செயல்படுத்துகின்றன.
+
+- **Node.js**: Node.js, ஒரு சர்வர்-பக்க (server-side) ஜாவாஸ்கிரிப்ட் இயக்க நேரம், ECMAScript தரநிலைகளுடன் ஒத்துப்போகிறது, ஜாவாஸ்கிரிப்டைச் சர்வர்-பக்க நிரலாக்கத்திற்குப் பயன்படுத்த உதவுகிறது.
+
+## ECMAScript இன் முக்கிய அம்சங்கள் (Key Features of ECMAScript)
+
+- **அம்பு செயல்பாடுகள் (Arrow Functions)**: செயல்பாடுகளை (functions) வரையறுப்பதற்கான சுருக்கமான தொடரியல் (syntax) மற்றும் `this` இன் லெக்சிகல் பிணைப்பை (lexical binding) வழங்கவும்.
+
+- **வகுப்புகள் (Classes)**: பொருள் சார்ந்த நிரலாக்கத்திற்கான (object-oriented programming) வகுப்புத் தொடரியல் (class syntax) அறிமுகப்படுத்தப்பட்டது.
+
+- **தொகுதிகள் (Modules)**: மாட்யூல் இறக்குமதிகள் (imports) மற்றும் ஏற்றுமதிகளுக்கு (exports) சொந்த ஆதரவு (native support) சேர்க்கப்பட்டது.
+
+- **பிராமிஸ்கள் (Promises)**: ஒத்திசைவற்ற (asynchronous) செயல்பாடுகளை மேம்படுத்தப்பட்ட கையாளுதலுக்காகப் பிராமிஸ்கள் அறிமுகப்படுத்தப்பட்டது.
+
+- **Async/Await**: ஒத்திசைவற்ற செயல்பாடுகளை (async functions) அறிமுகப்படுத்துவதன் மூலம் எளிமைப்படுத்தப்பட்ட ஒத்திசைவற்ற குறியீடு.
+
+- **let மற்றும் const**: `let` மற்றும் மாறிலிகளுடன் (constants) `const` தொகுதி-நோக்க மாறிகள் (Block-scoped variables).
+
+- **டிஸ்ட்ரக்சரிங் (Destructuring)**: வரிசைகள் மற்றும் பொருள்களிலிருந்து மதிப்புகளை (values) எளிதாகப் பிரித்தெடுக்க அனுமதிக்கிறது.
+
+- **டெம்ப்ளேட் லிட்டரல்கள் (Template Literals)**: ಹೆಚ್ಚು நெகிழ்வான சரம் இடைக்கணிப்பிற்காகத் (string interpolation) டெம்ப்ளேட் லிட்டரல்கள் அறிமுகப்படுத்தப்பட்டது.
+
+## வலை மேம்பாட்டில் ECMAScript இன் பங்கு (The Role of ECMAScript in Web Development)
+
+- **கிளையண்ட் பக்க ஸ்கிரிப்டிங் (Client-Side Scripting)**: ECMAScript என்பது இணைய மேம்பாட்டில் கிளையண்ட்-பக்க ஸ்கிரிப்டிங்கிற்கான அடித்தளமாகும். இது ஊடாடும் (interactive) வலைப் பயன்பாடுகளுக்குச் சக்தி அளிக்கிறது.
+
+- **இணக்கத்தன்மை (Compatibility)**: நவீன உலாவிகள் சமீபத்திய ECMAScript அம்சங்களை ஆதரிக்கும் அதே வேளையில், பழைய உலாவிகளுக்கான பின்தங்கிய இணக்கத்தன்மையை (backward compatibility) டெவலப்பர்கள் கருத்தில் கொள்ள வேண்டும்.
+
+- **டிரான்ஸ்பைலர்கள் (Transpilers)**: பேபல் (Babel) போன்ற கருவிகள், புதிய ECMAScript குறியீட்டைப் பரந்த உலாவி ஆதரவிற்காகப் பழைய பதிப்புகளாக மாற்றலாம்.
+
+- **டைப்ஸ்கிரிப்ட் (TypeScript)**: டைப்ஸ்கிரிப்ட், ECMAScript இன் சூப்பர்செட், மேம்படுத்தப்பட்ட கருவி (tooling) மற்றும் குறியீட்டுப் பாதுகாப்பிற்கான (code safety) நிலையான தட்டச்சு (static typing) ஆகியவற்றைச் சேர்க்கிறது.
+
+## ECMAScript தொடரியல் சில எடுத்துக்காட்டுகள் (Some Examples of ECMAScript Syntax)
+
+- **அம்பு செயல்பாட்டுத் தொடரியல் (Arrow Function Syntax)**: `const x = (x, y) => x + y;`
+
+- **வகுப்புத் தொடரியல் (Class Syntax)**: `class ClassName { constructor() { ... } }`
+
+- **பிராமிஸ் தொடரியல் (Promise Syntax)**: `const promiseA = new Promise(myExecutorFunc);`
+ `const promiseB = promiseA.then(handleFulfilled1, handleRejected1);`
+
+- **ஸ்ப்ரெட் ஆபரேட்டர் (Spread Operator)**: `const year = [...q1, ...q2, ...q3, ...q4];`
+
+- **வரைபடம் (Map)**: `const x = new Map([ ["a", 500],["b", 300],["c", 200] ]);`
+
+ECMAScript இணைய மேம்பாட்டின் ஒரு அடிப்படைப் பகுதியாகும், மாறும் மற்றும் ஊடாடும் வலைப் பயன்பாடுகளை நாம் எவ்வாறு உருவாக்குகிறோம் என்பதை வடிவமைக்கிறது. நவீன ஜாவாஸ்கிரிப்ட் மேம்பாட்டிற்குச் சமீபத்திய ECMAScript அம்சங்களைப் பற்றித் தெரிந்துகொள்வது அவசியம்.
+ECMAScript ஜாவாஸ்கிரிப்ட்டுக்கு ஒரு தரப்படுத்தப்பட்ட அடித்தளத்தை வழங்குவதில் ஒரு முக்கியப் பங்கை வகிக்கிறது, நிலைத்தன்மை, இயங்குதன்மை மற்றும் மொழியின் தொடர்ச்சியான முன்னேற்றத்தை உறுதி செய்கிறது. இந்தத் தரநிலைப்படுத்தல், டெவலப்பர்கள் ஜாவாஸ்கிரிப்ட் குறியீட்டை பல்வேறு தளங்கள் மற்றும் சூழல்களில் நம்பகத்தன்மையுடன் வேலை செய்யும் என்பதை அறிந்து நம்பிக்கையுடன் எழுத அனுமதிக்கிறது.
diff --git a/ta/miscellaneous/README.md b/ta/miscellaneous/README.md
new file mode 100644
index 00000000..e02715b4
--- /dev/null
+++ b/ta/miscellaneous/README.md
@@ -0,0 +1,24 @@
+---
+layout: editorial
+chapter: 19
+pageNumber: 112
+---
+
+# அத்தியாயம் 19
+# இதர (Miscellaneous)
+
+இந்த அத்தியாயத்தில், குறியீட்டை எழுதும் போது நாம் சந்திக்கும் பல்வேறு தலைப்புகளைப் பற்றி விவாதிப்போம். தலைப்புகள் கீழே பட்டியலிடப்பட்டுள்ளன:
+
+* [API மற்றும் AJAX (API and AJAX)](./api-ajax.md)
+* [JS பயன்பாட்டை உருவாக்குதல் மற்றும் வரிசைப்படுத்துதல் (Building and Deploying JS application)](./building-and-deploying.md)
+* [கால்பேக் (Callback)](./callback.md)
+* [கரியிங் (Currying)](./currying.md)
+* [பிழைத்திருத்தம் (Debugging)](./debugging.md)
+* [ECMA ஸ்கிரிப்ட் (ECMA Script)](./ECMA-script.md)
+* [உலகளாவிய தடம் (Global Footprint)](./global-footprint.md)
+* [ஹொயிஸ்டிங் (Hoisting)](./hoisting.md)
+* [இணைக்கப்பட்ட பட்டியல் (Linked List)](./linked-list.md)
+* [பாலிஃபில்கள் மற்றும் டிரான்ஸ்பைலர்கள் (Polyfills and Transpilers)](./polyfills-and-transpilers.md)
+* [ஒற்றை நூல் தன்மை (Single Thread Nature)](./single-thread-nature.md)
+* [டெம்ப்ளேட் லிட்டரல்கள் (Template Literals)](./template-literals.md)
+* [சோதனை (Testing)](./testing.md)
diff --git a/ta/miscellaneous/api-ajax.md b/ta/miscellaneous/api-ajax.md
new file mode 100644
index 00000000..3404bc19
--- /dev/null
+++ b/ta/miscellaneous/api-ajax.md
@@ -0,0 +1,167 @@
+---
+chapter: 19
+pageNumber: 129
+description: இந்த அத்தியாயம் API களின் (Application Programming Interfaces) கருத்தை அறிமுகப்படுத்துகிறது மற்றும் AJAX (Asynchronous JavaScript and XML) மூலம் அவற்றின் பயன்பாட்டை விளக்குகிறது. மேம்பட்ட செயல்பாட்டிற்காக வெளிப்புற மூலங்களிலிருந்து (external sources) தரவை எவ்வாறு பெறுவது மற்றும் வலைப் பயன்பாடுகளில் (web applications) அவற்றை எவ்வாறு ஒருங்கிணைப்பது என்பதை அறிக.
+---
+
+# Web API மற்றும் AJAX (Web API and AJAX)
+இந்தப் பகுதியில், API மற்றும் AJAX பற்றி விவாதிப்போம், பயன்பாடுகள் சேவையகங்களுடன் (servers) தொடர்புகொள்ளவும், முழுப் பக்க மறுஏற்றம் (full page reload) தேவையில்லாமல் தரவை அனுப்பவோ அல்லது மீட்டெடுக்கவோ உதவும் இரண்டு முக்கியமான தொழில்நுட்பங்கள்.
+
+## API (Application Programming Interface)
+
+ஒரு **API** (Application Programming Interface) என்பது வெவ்வேறு மென்பொருள் பயன்பாடுகளை ஒன்றுக்கொன்று தொடர்புகொள்ள அனுமதிக்கும் விதிகள் மற்றும் நெறிமுறைகளின் (protocols) தொகுப்பாகும். பயன்பாடுகள் தகவலைக் கோரவும் (request) பரிமாறவும் பயன்படுத்தக்கூடிய முறைகள் மற்றும் தரவு வடிவங்களை இது வரையறுக்கிறது.
+
+### முக்கியப் புள்ளிகள் (Key Points)
+
+- டெவலப்பர்கள் மற்ற மென்பொருள் கூறுகள் (components), சேவைகள் அல்லது இயங்குதளங்களின் (platforms) உள் செயல்பாடுகளைப் புரிந்து கொள்ளாமலேயே அவற்றின் செயல்பாட்டை அணுக APIகள் உதவுகின்றன.
+
+- பயன்பாடுகள் கோரிக்கைகளை (requests) அனுப்பவும் பதில்களைப் பெறவும் APIகள் ஒரு வழியை வழங்குகின்றன, இது தடையின்றி (seamlessly) தொடர்பு கொள்ளவும் தரவைப் பகிரவும் அனுமதிக்கிறது.
+
+- இணையப் பயன்பாடுகளை இணையத்தில் தொடர்புகொள்ள அனுமதிக்கும் **இணைய APIகள் (web APIs)**, மீண்டும் பயன்படுத்தக்கூடிய குறியீட்டுச் செயல்பாடுகளை வழங்கும் **நூலக APIகள் (library APIs)** மற்றும் அடிப்படை OS உடன் தொடர்புகொள்வதை இயக்கும் **இயக்க முறைமை APIகள் (operating system APIs)** ஆகியவை APIகளின் பொதுவான வகைகளாகும்.
+
+- ஒருங்கிணைப்புகளை (integrations) உருவாக்குவதற்கும், ஏற்கனவே உள்ள இயங்குதளங்களின் (platforms) மேல் மென்பொருளை உருவாக்குவதற்கும், பல்வேறு அமைப்புகளுக்கிடையே இயங்குதன்மையை (interoperability) செயல்படுத்துவதற்கும் APIகள் அவசியம்.
+
+- டெவலப்பர்கள் அல்லது சேவை வழங்குநர்களால் அடிக்கடி வழங்கப்படும் API ஆவணங்கள் (API documentation), கிடைக்கக்கூடிய முனைப்புள்ளிகள் (endpoints), கோரிக்கை முறைகள் (request methods) மற்றும் பதில் வடிவங்கள் (response formats) உள்ளிட்ட API ஐ எவ்வாறு பயன்படுத்துவது என்பதை விளக்குகிறது.
+
+- சமூக ஊடக APIகள் (எ.கா., Facebook Graph API), கட்டண நுழைவாயில் (payment gateway) APIகள் (எ.கா., PayPal API) மற்றும் கிளவுட் சேவை APIகள் (எ.கா., AWS API) ஆகியவை பிரபலமான APIகளின் எடுத்துக்காட்டுகளில் அடங்கும்.
+
+### APIகளின் நன்மைகள் (Benefits of APIs)
+
+- **இயங்குதன்மை (Interoperability):** APIகள் வெவ்வேறு மென்பொருள் அமைப்புகளை ஒன்றாகச் செயல்பட அனுமதிக்கின்றன, இணக்கத்தன்மை (compatibility) மற்றும் தரவுப் பரிமாற்றத்தை (data exchange) ஊக்குவிக்கின்றன.
+
+- **செயல்திறன் (Efficiency):** டெவலப்பர்கள் நேரத்தையும் முயற்சியையும் மிச்சப்படுத்த, குறிப்பிட்ட செயல்பாட்டை உருவாக்குவதில் கவனம் செலுத்தி, தற்போதுள்ள APIகளைப் பயன்படுத்திக்கொள்ளலாம்.
+
+- **அளவிடுதல் (Scalability):** மூன்றாம் தரப்பு (third-party) கருவிகள் மற்றும் சேவைகளுடன் ஒருங்கிணைப்பதன் மூலம் சேவைகள் மற்றும் அம்சங்களின் விரிவாக்கத்தை APIகள் செயல்படுத்துகின்றன.
+
+- **புதுமை (Innovation):** டெவலப்பர்கள் புதிய பயன்பாடுகள் மற்றும் சேவைகளை உருவாக்குவதற்கான வாய்ப்புகளைத் திறப்பதன் மூலம் APIகள் புதுமைகளை வளர்க்கின்றன.
+
+- **பாதுகாப்பு (Security):** தரவு மற்றும் சேவைகளுக்கான பாதுகாப்பான அணுகலை (secure access) உறுதி செய்வதற்காக APIகள் பெரும்பாலும் அங்கீகாரம் (authentication) மற்றும் அங்கீகார வழிமுறைகளை (authorization mechanisms) உள்ளடக்கியது.
+
+## AJAX (Asynchronous JavaScript and XML)
+
+AJAX, சுருக்கமாக **Asynchronous JavaScript and XML**, வலை மேம்பாட்டில் (web development) ஒரு அடிப்படைத் தொழில்நுட்பமாகும். முழுப் பக்க மறுஏற்றம் (full page reload) தேவையில்லாமல், சேவையகத்திற்கு (server) ஒத்திசைவற்ற கோரிக்கைகளை (asynchronous requests) மேற்கொள்ளவும், தரவை மீட்டெடுக்கவும், வலைப்பக்கத்தின் பகுதிகளைப் புதுப்பிக்கவும் இது வலைப் பயன்பாடுகளுக்கு உதவுகிறது. பெயர் XML ஐப் பரிந்துரைக்கும் அதே வேளையில், AJAX பல்வேறு தரவு வடிவங்களுடன் (data formats) செயல்பட முடியும், JSON மிகவும் பொதுவானது.
+
+### AJAX என்றால் என்ன?
+
+அதன் மையத்தில், AJAX என்பது பக்கத்துடனான பயனரின் தொடர்புக்கு இடையூறு விளைவிக்காமல், வலைப்பக்கங்களைப் பின்னணியில் உள்ள சேவையகத்துடன் (server) தொடர்பு கொள்ள அனுமதிக்கும் ஒரு நுட்பமாகும். இந்த ஒத்திசைவற்ற நடத்தை (asynchronous behavior) ஜாவாஸ்கிரிப்ட்டைப் பயன்படுத்தி அடையப்படுகிறது மற்றும் மேலும் ஊடாடும் (interactive) மற்றும் பதிலளிக்கக்கூடிய வலைப் பயன்பாடுகளின் (responsive web applications) வளர்ச்சிக்கு உதவுகிறது.
+
+### AJAX எவ்வாறு செயல்படுகிறது?
+
+1. **ஜாவாஸ்கிரிப்ட்**: கோரிக்கைகளை (requests) தொடங்குவதற்கும் பதில்களை (responses) ஒத்திசைவின்றி (asynchronously) கையாளுவதற்கும் AJAX ஜாவாஸ்கிரிப்ட்டை பெரிதும் நம்பியுள்ளது.
+
+2. **XMLHttpRequest (XHR) பொருள்**: வரலாற்று ரீதியாக `XMLHttpRequest` பொருள் (object) பயன்படுத்தப்பட்டாலும், நவீன இணைய மேம்பாடு பெரும்பாலும் AJAX கோரிக்கைகளுக்குப் `fetch` API ஐப் பயன்படுத்துகிறது, இது மிகவும் உள்ளுணர்வு மற்றும் நெகிழ்வான அணுகுமுறையை (flexible approach) வழங்குகிறது.
+
+3. **சேவையகத் தொடர்பு (Server Communication)**: பயனர் ஒரு பட்டனைக் கிளிக் செய்வது போன்ற ஒரு நிகழ்வைத் தூண்டும்போது, ஜாவாஸ்கிரிப்ட் HTTP கோரிக்கையைச் சேவையகத்திற்கு (server) அனுப்புகிறது. இந்தக் கோரிக்கைகள் GET (தரவைப் பெறுவதற்கு) அல்லது POST (தரவைச் சேவையகத்திற்கு அனுப்புவதற்கு) ஆக இருக்கலாம்.
+
+4. **ஒத்திசைவற்ற செயலாக்கம் (Asynchronous Processing)**: AJAX கோரிக்கைகள் ஒத்திசைவற்றவை, அதாவது பதிலுக்காகக் காத்திருக்கும் போது உலாவி (browser) மற்ற குறியீட்டைத் தொடர்ந்து செயல்படுத்த முடியும். இது பயனர் இடைமுகம் (user interface) உறைவதைத் (freezing) தடுக்கிறது.
+
+5. **பதில் கையாளுதல் (Response Handling)**: சேவையகம் கோரிக்கையைச் செயல்படுத்தியதும், அது கிளையண்டிற்கு (client) ஒரு பதிலை (response) அனுப்புகிறது. ஜாவாஸ்கிரிப்ட் இந்தப் பதிலைக் கையாளுகிறது, பொதுவாக ஆவணப் பொருள் மாதிரியை (Document Object Model - DOM) புதிய தரவுகளுடன் புதுப்பிப்பதன் மூலம்.
+
+6. **ரெண்டரிங் (Rendering)**: புதுப்பிக்கப்பட்ட உள்ளடக்கம் (content) முழுப் பக்க மறுஏற்றம் தேவையில்லாமல் இணையப் பக்கத்தில் ரெண்டர் செய்யப்படுகிறது (rendered), இதன் விளைவாக மென்மையான பயனர் அனுபவம் (user experience) கிடைக்கும்.
+
+### AJAX இன் நன்மைகள்
+
+- **மேம்படுத்தப்பட்ட பயனர் அனுபவம் (Improved User Experience)**: முழுப் பக்கப் புதுப்பிப்புகள் (full page refreshes) தேவையில்லாமல் தரவை ஏற்றவும் காண்பிக்கவும் AJAX வலைப் பயன்பாடுகளை அனுமதிக்கிறது, பயனர் அனுபவத்தை மிகவும் தடையற்றதாகவும் (seamless) ஊடாடும் வகையிலும் (interactive) ஆக்குகிறது.
+
+- **செயல்திறன் (Efficiency)**: AJAX கோரிக்கைகள் இலகுரக (lightweight) மற்றும் தேவையான தரவை மட்டுமே மாற்றும், அலைவரிசைப் பயன்பாட்டைக் (bandwidth usage) குறைக்கும் மற்றும் பயன்பாட்டின் செயல்திறனை (application performance) மேம்படுத்தும்.
+
+- **நிகழ்நேரப் புதுப்பிப்புகள் (Real-time Updates)**: அரட்டைப் பயன்பாடுகள் (chat applications), நேரலை அறிவிப்புகள் (live notifications) மற்றும் டைனமிக் உள்ளடக்கப் புதுப்பிப்புகள் (dynamic content updates) போன்ற நிகழ்நேர அம்சங்களை (real-time features) உருவாக்குவதற்கு AJAX முக்கியமானது.
+
+- **டைனமிக் ஏற்றுதல் (Dynamic Loading)**: உள்ளடக்கத்தை (content) தேவைக்கேற்ப (on-demand) ஏற்றலாம், இது வேகமான ஆரம்பப் பக்க ஏற்ற நேரங்களுக்கும் (initial page load times) அதிகப் பதிலளிக்கக்கூடிய பயன்பாடுகளுக்கும் (responsive applications) வழிவகுக்கும்.
+
+### பொதுவான பயன்பாட்டு வழக்குகள் (Common Use Cases)
+
+AJAX பயன்படுத்தப்படும் சில பொதுவான காட்சிகள் (scenarios) பின்வருமாறு:
+
+- **படிவச் சமர்ப்பிப்புகள் (Form Submissions)**: சரிபார்ப்பு (validation) மற்றும் தரவுச் சமர்ப்பிப்புக்காக முழுப் பக்கத்தையும் மீண்டும் ஏற்றாமல் (reloading) படிவங்களைச் சமர்ப்பித்தல் (Submitting forms).
+
+- **எல்லையற்ற சுருள் (Infinite Scrolling)**: பயனர் பக்கத்தின் கீழே உருட்டும் (scrolls down) போது கூடுதல் உள்ளடக்கத்தை (content) ஏற்றுதல், தொடர்ச்சியான உலாவுதல் (browsing) அனுபவத்தை வழங்குகிறது.
+
+- **தானியங்கு-பரிந்துரைகள் (Auto-suggestions)**: பயனர்கள் தேடல் வினவல்களைத் (search queries) தட்டச்சு செய்யும்போது நிகழ்நேரத் தேடல் பரிந்துரைகளை (real-time search suggestions) வழங்குதல்.
+
+- **உள்ளடக்கத்தைப் புதுப்பித்தல் (Updating Content)**: கைமுறைப் பக்கப் புதுப்பிப்புகள் (manual page refreshes) தேவையில்லாமல் செய்தி ஊட்டங்கள் (news feeds), வானிலைத் தகவல் அல்லது விளையாட்டு மதிப்பெண்கள் போன்ற உள்ளடக்கத்தை மாறும் (Dynamically) வகையில் புதுப்பித்தல்.
+
+## AJAX ஐப் பயன்படுத்தி OpenWeatherMap API உடன் வானிலைத் தரவைப் பெறுதல் (Fetching Weather Data with OpenWeatherMap API using AJAX)
+
+இந்த எடுத்துக்காட்டில், OpenWeatherMap API இலிருந்து வானிலைத் தகவலைப் பெறவும், அதை இணையப் பக்கத்தில் காண்பிக்கவும் AJAX (Asynchronous JavaScript and XML) ஐ எவ்வாறு பயன்படுத்துவது என்பதை விளக்குவோம்.
+
+### அறிமுகம்
+
+OpenWeatherMap API என்பது உலகெங்கிலும் உள்ள இடங்களுக்கான வானிலைத் தகவலைப் பெறுவதற்கான சக்திவாய்ந்த கருவியாகும். ஒரு குறிப்பிட்ட நகரத்திற்கான தற்போதைய வானிலைத் தரவைப் பெறுவதற்கும், உங்கள் பயன்பாடு அல்லது ஆவணங்களில் அதைக் காண்பிப்பதற்கும் API ஐ எவ்வாறு பயன்படுத்துவது என்பதை இந்த எடுத்துக்காட்டு விளக்குகிறது.
+
+### API திறவுகோல் (API Key)
+
+தொடங்குவதற்கு முன், [OpenWeatherMap](https://openweathermap.org/api) இலிருந்து அவர்களின் வானிலைத் தரவு API ஐ அணுக நீங்கள் API திறவுகோலுக்குப் பதிவு செய்ய வேண்டும். கீழே உள்ள குறியீட்டில் உள்ள `'YOUR_API_KEY'` என்பதை உங்கள் உண்மையான API திறவுகோலைக் கொண்டு மாற்றவும்.
+
+```javascript
+const apiKey = 'YOUR_API_KEY';
+```
+### எளிய வானிலைச் செயலி HTML (Simple Weather App HTML)
+
+இந்த எடுத்துக்காட்டில், OpenWeatherMap API இலிருந்து வானிலைத் தரவைப் பெற்று காண்பிக்கும் ஒரு எளிய வானிலைப் பயன்பாட்டிற்கான (weather app) HTML கட்டமைப்பை (structure) வழங்குவோம்.
+
+#### HTML கட்டமைப்பு (HTML Structure)
+
+```html
+
+
+
+
+
+ Weather Report
+
+
+
+இங்கே, `add` செயல்பாடு ஹொயிஸ்டிங் செய்யப்பட்டு, உலகளாவிய செயல்பாட்டுச் சூழலின் உருவாக்கக் கட்டத்தில் ஹீப் நினைவகத்தில் `undefined` என்று தொடங்கப்படுகிறது. இதனால் பிழை ஏற்படுகிறது.
diff --git a/ta/miscellaneous/linked-list.md b/ta/miscellaneous/linked-list.md
new file mode 100644
index 00000000..2445c0a2
--- /dev/null
+++ b/ta/miscellaneous/linked-list.md
@@ -0,0 +1,130 @@
+---
+chapter: 19
+pageNumber: 118
+description: இணைக்கப்பட்ட பட்டியல் (Linked List) என்பது உறுப்புகளின் (elements) தொகுப்பைச் சேமிக்கப் பயன்படும் ஒரு நேரியல் தரவுக் கட்டமைப்பாகும் (linear data structure), இவை முனைகள் (nodes) என்று அழைக்கப்படுகின்றன. இணைக்கப்பட்ட பட்டியலில் உள்ள ஒவ்வொரு முனையிலும் அது குறிக்கும் உறுப்பின் தரவு அல்லது மதிப்பு மற்றும் வரிசையில் உள்ள அடுத்த முனைக்கான குறிப்பு (பாயிண்டர் - pointer) என இரண்டு பகுதிகள் உள்ளன. பட்டியலில் உள்ள கடைசி முனை null ஐக் குறிக்கிறது, இது பட்டியலின் முடிவைக் குறிக்கிறது.
+---
+# இணைக்கப்பட்ட பட்டியல் (Linked List)
+
+இது அனைத்து நிரலாக்க மொழிகளிலும் காணப்படும் பொதுவான தரவுக் கட்டமைப்பாகும். இணைக்கப்பட்ட பட்டியல் (linked list) ஜாவாஸ்கிரிப்டில் உள்ள சாதாரண வரிசைக்கு (array) மிகவும் ஒத்திருக்கிறது, இது சற்று வித்தியாசமாகச் செயல்படுகிறது.
+
+இங்கே பட்டியலில் உள்ள ஒவ்வொரு உறுப்பும் (element) ஒரு தனிப் பொருளாகும், இது ஒரு இணைப்பைக் (link) கொண்டுள்ளது அல்லது அடுத்ததைக் குறிக்கும் பாயிண்டரைக் (pointer) கொண்டுள்ளது. ஜாவாஸ்கிரிப்டில் இணைக்கப்பட்ட பட்டியல்களுக்கு உள்ளமைக்கப்பட்ட முறை (built-in method) அல்லது செயல்பாடு (function) இல்லை, எனவே ஒருவர் அதைச் செயல்படுத்த வேண்டும். இணைக்கப்பட்ட பட்டியலுக்கான எடுத்துக்காட்டு கீழே காட்டப்பட்டுள்ளது.
+
+```
+["one", "two", "three", "four"]
+```
+
+### இணைக்கப்பட்ட பட்டியல்களின் வகைகள் (Types of Linked Lists)
+
+இணைக்கப்பட்ட பட்டியல்களில் மூன்று வெவ்வேறு வகைகள் உள்ளன:
+
+1. **ஒற்றை இணைக்கப்பட்ட பட்டியல்கள் (Singly Linked Lists):** ஒவ்வொரு முனையும் (node) அடுத்த முனைக்கு ஒரு பாயிண்டரை (pointer) மட்டுமே கொண்டிருக்கும்.
+2. **இரட்டை இணைக்கப்பட்ட பட்டியல்கள் (Doubly Linked Lists):** ஒவ்வொரு முனையிலும் இரண்டு பாயிண்டர்கள் உள்ளன, ஒன்று அடுத்த முனைக்கும் மற்றொன்று முந்தைய முனைக்கும்.
+3. **வட்ட இணைக்கப்பட்ட பட்டியல்கள் (Circular Linked Lists):** ஒரு வட்ட இணைக்கப்பட்ட பட்டியல் கடைசி முனையை முதல் முனையையோ அல்லது அதற்கு முன் உள்ள வேறு ஏதேனும் முனையையோ சுட்டிக்காட்டுவதன் மூலம் ஒரு வளையத்தை (loop) உருவாக்குகிறது.
+
+## சேர் (Add)
+
+இணைக்கப்பட்ட பட்டியலில் மதிப்பைச் சேர்க்க `add` முறை இங்கே உருவாக்கப்பட்டுள்ளது.
+
+```javascript
+class Node {
+ constructor(data) {
+ this.data = data
+ this.next = null
+ }
+}
+
+class LinkedList {
+ constructor(head) {
+ this.head = head
+ }
+ append = (value) => {
+ const newNode = new Node(value)
+ let current = this.head
+ if (!this.head) {
+ this.head = newNode
+ return
+ }
+ while (current.next) {
+ current = current.next
+ }
+ current.next = newNode
+ }
+}
+```
+
+## பாப் (Pop)
+
+இணைக்கப்பட்ட பட்டியலிலிருந்து மதிப்பை அகற்ற, இங்கே ஒரு `pop` முறை உருவாக்கப்பட்டுள்ளது.
+
+```javascript
+class Node {
+ constructor(data) {
+ this.data = data
+ this.next = null
+ }
+}
+
+class LinkedList {
+ constructor(head) {
+ this.head = head
+ }
+ pop = () => {
+ let current = this.head
+ while (current.next.next) {
+ current = current.next
+ }
+ current.next = current.next.next
+ }
+}
+```
+
+## முன்னொட்டு (Prepend)
+
+இணைக்கப்பட்ட பட்டியலின் முதல் குழந்தைக்கு (child) முன் மதிப்பைச் சேர்க்க, இங்கே ஒரு `prepend` முறை உருவாக்கப்பட்டுள்ளது.
+
+```javascript
+class Node {
+ constructor(data) {
+ this.data = data
+ this.next = null
+ }
+}
+
+class LinkedList {
+ constructor(head) {
+ this.head = head
+ }
+ prepend = (value) => {
+ const newNode = new Node(value)
+ if (!this.head) {
+ this.head = newNode
+ }
+ else {
+ newNode.next = this.head
+ this.head = newNode
+ }
+ }
+}
+```
+
+## ஷிப்ட் (Shift)
+
+இணைக்கப்பட்ட பட்டியலின் முதல் உறுப்பை (element) அகற்ற, இங்கே `shift` முறை உருவாக்கப்பட்டுள்ளது.
+
+```javascript
+class Node {
+ constructor(data) {
+ this.data = data
+ this.next = null
+ }
+}
+
+class LinkedList {
+ constructor(head) {
+ this.head = head
+ }
+ shift = () => {
+ this.head = this.head.next
+ }
+}
+```
\ No newline at end of file
diff --git a/ta/miscellaneous/polyfills-and-transpilers.md b/ta/miscellaneous/polyfills-and-transpilers.md
new file mode 100644
index 00000000..af689011
--- /dev/null
+++ b/ta/miscellaneous/polyfills-and-transpilers.md
@@ -0,0 +1,63 @@
+---
+chapter: 19
+pageNumber: 116
+description: பாலிஃபில்கள் (Polyfills) மற்றும் டிரான்ஸ்பைலர்கள் (transpilers) என்பவை வலை மேம்பாட்டில் (web development) பயன்படுத்தப்படும் இரண்டு முக்கியமான கருவிகளாகும் (tools), இவை நவீன ஜாவாஸ்கிரிப்ட் குறியீடு பழைய உலாவிகளில் இயங்குவதை உறுதிசெய்யவும் மற்றும் பழைய சூழல்களுடன் (environments) பொருந்தக்கூடிய தன்மையைப் (compatibility) பராமரிக்கும் அதே வேளையில் சமீபத்திய ஜாவாஸ்கிரிப்ட் அம்சங்களைப் பயன்படுத்திக் கொள்ளவும் உதவுகின்றன.
+---
+# பாலிஃபில்கள் மற்றும் டிரான்ஸ்பைலர்கள் (Polyfills and Transpilers)
+
+ஜாவாஸ்கிரிப்ட் அவ்வப்போது உருவாகிறது. தொடர்ந்து, புதிய மொழி முன்மொழிவுகள் (proposals) சமர்ப்பிக்கப்பட்டு, பகுப்பாய்வு செய்யப்பட்டு, [https://tc39.github.io/ecma262/ ](https://tc39.github.io/ecma262/) இல் சேர்க்கப்பட்டு பின்னர் விவரக்குறிப்பில் (specification) இணைக்கப்படுகின்றன. உலாவியைப் (browser) பொறுத்து ஜாவாஸ்கிரிப்ட் இயந்திரங்களில் (engines) அது எவ்வாறு செயல்படுத்தப்படுகிறது என்பதில் வேறுபாடுகள் இருக்கலாம். சிலர் வரைவு முன்மொழிவுகளைச் (draft proposals) செயல்படுத்தலாம், மற்றவர்கள் முழு விவரக்குறிப்பு வெளியாகும் வரை காத்திருக்கலாம். புதிய விஷயங்கள் அறிமுகப்படுத்தப்படும்போது பின்தங்கிய இணக்கத்தன்மை (Backward compatibility) சிக்கல்கள் எழுகின்றன.
+
+பழைய உலாவிகளில் நவீன குறியீட்டை ஆதரிக்க நாம் இரண்டு கருவிகளைப் பயன்படுத்துகிறோம்: `transpilers` மற்றும் `polyfills`.
+
+**டிரான்ஸ்பைலர்கள் (Transpilers)**
+
+இது நவீன குறியீட்டை மொழிபெயர்க்கும் ஒரு நிரலாகும் (program) மற்றும் பழைய தொடரியல் கட்டமைப்புகளைப் (syntax constructs) பயன்படுத்தி அதை மீண்டும் எழுதுகிறது, இதனால் பழைய இயந்திரம் அதைப் புரிந்து கொள்ள முடியும். உதாரணமாக, "`nullish` coalescing operator" `??` 2020 இல் அறிமுகப்படுத்தப்பட்டது, மேலும் காலாவதியான உலாவிகளால் (outdated browsers) அதைப் புரிந்து கொள்ள முடியாது.
+
+இப்போது, `nullish` coalescing operator" `??` ஐப் பழைய உலாவிகளுக்குப் புரியும் வகையில் செய்வது டிரான்ஸ்பைலரின் வேலையாகும்.
+
+```javascript
+// before running the transpiler
+height = height ?? 200;
+
+// after running the transpiler
+height = (height !== undefined && height !== null) ? height: 200;
+
+```
+
+{% hint style="info" %}
+ [Babel](https://babeljs.io/) என்பது மிகவும் பிரபலமான டிரான்ஸ்பைலர்களில் ஒன்றாகும். மேம்பாட்டுச் செயல்பாட்டில், குறியீட்டை டிரான்ஸ்பைல் செய்ய [webpack](https://webpack.js.org/) அல்லது [parcel](https://parceljs.org/) போன்ற உருவாக்கக் கருவிகளைப் (build tools) பயன்படுத்தலாம்.
+{% endhint %}
+
+**பாலிஃபில்கள் (Polyfills)**
+
+காலாவதியான உலாவி இயந்திரங்களில் புதிய செயல்பாடுகள் கிடைக்காத நேரங்களும் உள்ளன. இந்த நிலையில், புதிய செயல்பாட்டைப் பயன்படுத்தும் குறியீடு இயங்காது. இடைவெளிகளை நிரப்ப, காணாமல் போன செயல்பாட்டைச் சேர்க்கிறோம், இது `polyfill` என்று அழைக்கப்படுகிறது. எடுத்துக்காட்டாக, `filter()` முறை ES5 இல் அறிமுகப்படுத்தப்பட்டது மற்றும் சில பழைய உலாவிகளில் ஆதரிக்கப்படவில்லை. இந்த முறை ஒரு செயல்பாட்டை (function) ஏற்றுக்கொள்கிறது மற்றும் செயல்பாடு `true` என்று திருப்பித் தரும் அசல் வரிசையின் (original array) மதிப்புகளை மட்டுமே கொண்ட வரிசையைத் திருப்பித் தருகிறது.
+
+```javascript
+const arr = [1, 2, 3, 4, 5, 6];
+const filtered = arr.filter((e) => e % 2 === 0); // filter outs the even number
+console.log(filtered);
+
+// [2, 4, 6]
+```
+
+வடிகட்டிக்கான (filter) பாலிஃபில் கீழே கொடுக்கப்பட்டுள்ளது.
+
+```javascript
+Array.prototype.filter = function (callback) {
+ // Store the new array
+ const result = [];
+ for (let i = 0; i < this.length; i++) {
+ // call the callback with the current element, index, and context.
+ //if it passes the test then add the element in the new array.
+ if (callback(this[i], i, this)) {
+ result.push(this[i]);
+ }
+ }
+ //return the array
+ return result
+}
+```
+
+{% hint style="info" %}
+வெவ்வேறு உலாவி இயந்திரங்களால் ஆதரிக்கப்படும் புதுப்பிக்கப்பட்ட செயல்பாடு மற்றும் தொடரியலை [caniuse](https://caniuse.com/) காட்டுகிறது.
+{% endhint %}
diff --git a/ta/miscellaneous/single-thread-nature.md b/ta/miscellaneous/single-thread-nature.md
new file mode 100644
index 00000000..0ea1e4a7
--- /dev/null
+++ b/ta/miscellaneous/single-thread-nature.md
@@ -0,0 +1,88 @@
+---
+chapter: 19
+pageNumber: 133
+description: ஜாவாஸ்கிரிப்ட் என்பது ஒரு பிரபலமான நிரலாக்க மொழியாகும், இது முதன்மையாக இணைய மேம்பாட்டில் பயன்படுத்தப்படுகிறது. பல மொழிகளிலிருந்து ஜாவாஸ்கிரிப்ட்டை வேறுபடுத்தும் முக்கியப் பண்புகளில் ஒன்று அதன் ஒற்றை நூல் (single-threaded) தன்மை ஆகும். அதாவது ஜாவாஸ்கிரிப்ட் குறியீடு உலாவி அல்லது இயக்க நேரச் சூழலின் (runtime environment) ஒரு முக்கிய நூலில் (thread) செயல்படுத்தப்படுகிறது.
+---
+
+# ஜாவாஸ்கிரிப்ட்டின் ஒற்றை நூல் தன்மை (Single-Threaded Nature of JavaScript)
+
+ஜாவாஸ்கிரிப்ட் என்பது ஒற்றை நூல் நிரலாக்க மொழியாகும் (single-threaded programming language), இது ஒரு முக்கிய நூலில் (main thread) குறியீட்டை வரிசையாகச் (sequentially) செயல்படுத்துகிறது. வலைப் பயன்பாடுகளில் பதிலளிக்கும் தன்மையை (responsiveness) உறுதிசெய்து, முக்கிய நூலைத் தடுக்காமல் (without blocking) பணிகளைத் திறமையாகக் கையாள, தடுப்பற்ற ஒத்திசைவற்ற வடிவங்களை (non-blocking asynchronous patterns) இது நம்பியுள்ளது. இது ஒத்திசைவை (concurrency) எளிதாக்கும் அதே வேளையில், கால்பேக்குகள் (callbacks) மற்றும் நிகழ்வு உந்துதல் (event-driven) நிரலாக்கத்தின் திறம்படப் பயன்பாடு தேவைப்படுகிறது.
+
+## ஒற்றை நூல் ஜாவாஸ்கிரிப்ட்டைப் புரிந்துகொள்வது (Understanding Single-Threaded JavaScript)
+
+ஜாவாஸ்கிரிப்ட்டின் ஒற்றை நூல் செயலாக்கத்தைப் பற்றிப் புரிந்துகொள்ள வேண்டிய சில முக்கியக் குறிப்புகள் இங்கே:
+
+1. **ஒரு நூல், ஒரு பணி (One Thread, One Task):** ஜாவாஸ்கிரிப்ட் ஒற்றைச் செயலாக்க நூலிற்குள் (single execution thread) இயங்குகிறது, அதாவது அதால் ஒரு நேரத்தில் ஒரு பணியை மட்டுமே செய்ய முடியும். இந்த நூல் பெரும்பாலும் "முக்கிய நூல் (main thread)" அல்லது "நிகழ்வு லூப் (event loop)" என்று குறிப்பிடப்படுகிறது.
+
+2. **தடுப்பது vs தடுக்காதது (Blocking vs. Non-Blocking):** ஜாவாஸ்கிரிப்ட் குறியீடு இயல்பாகவே தடுக்காதது (non-blocking). அதாவது, அதிக நேரம் எடுக்கும் செயல்பாடு (நெட்வொர்க் கோரிக்கை (network request) அல்லது கோப்பு வாசிப்பு (file read) போன்ற) எதிர்கொள்ளப்படும் போது, ஜாவாஸ்கிரிப்ட் அது முடிவடையும் வரை காத்திருக்காது. அதற்குப் பதிலாக, அது பணியைச் சூழலின் மற்றொரு பகுதிக்கு (எ.கா., உலாவி அல்லது Node.js இயக்க நேரம்) அளித்து, மற்ற குறியீட்டைத் தொடர்ந்து செயல்படுத்துகிறது.
+
+3. **ஒத்திசைவற்ற நிரலாக்கம் (Asynchronous Programming):** முக்கிய நூலைத் தடுக்காமல் அதிக நேரம் எடுக்கும் செயல்பாடுகளைக் கையாள, ஜாவாஸ்கிரிப்ட் ஒத்திசைவற்ற நிரலாக்க வடிவங்களை (asynchronous programming patterns) பெரிதும் நம்பியுள்ளது. கால்பேக்குகள், பிராமிஸ்கள் (Promises) மற்றும் async/await போன்ற செயல்பாடுகள் டெவலப்பர்களை ஒத்திசைவற்ற செயல்பாடுகளுடன் திறம்படச் செயல்பட அனுமதிக்கின்றன.
+
+4. **நிகழ்வு-உந்துதல் (Event-Driven):** ஜாவாஸ்கிரிப்ட் பெரும்பாலும் "நிகழ்வு-உந்துதல்" என விவரிக்கப்படுகிறது. அதாவது பயனர் தொடர்புகள் (கிளிக்குகள், விசை அழுத்தங்கள்), டைமர்கள் (timers) அல்லது நெட்வொர்க் பதில்கள் (network responses) போன்ற நிகழ்வுகளைக் (events) கேட்டு அதற்கேற்பப் பதிலளிக்கிறது. ஒரு நிகழ்வு நிகழும்போது, அதனுடன் தொடர்புடைய கால்பேக் செயல்பாடு செயல்படுத்தப்படுகிறது.
+
+5. **ஒருங்கிணைப்பு மாதிரி (Concurrency Model):** ஜாவாஸ்கிரிப்ட் ஒற்றை நூலில் இயங்கும் அதே வேளையில், ஒத்திசைவு மாதிரியானது குறியீட்டின் ஒருங்கிணைந்த செயலாக்கத்தை செயல்படுத்துகிறது. பதிலளிக்கும் தன்மை மற்றும் தடுக்காத நடத்தை (non-blocking behavior) ஆகியவற்றை உறுதி செய்யும் வகையில் ஒத்திசைவற்ற பணிகளைச் செயல்படுத்துவதை நிர்வகிக்கும் நிகழ்வு லூப் (event loop) போன்ற வழிமுறைகள் மூலம் இது அடையப்படுகிறது.
+
+6. **உலாவி மற்றும் சுற்றுச்சூழல் தொடர்பு (Browser and Environment Interaction):** வலை மேம்பாட்டில், ஜாவாஸ்கிரிப்ட் உலாவியின் ஆவணப் பொருள் மாதிரி (Document Object Model - DOM) மற்றும் பிற உலாவி APIகளுடன் தொடர்பு கொள்கிறது. பதிலளிக்கக்கூடிய பயனர் இடைமுகத்தைப் (user interface) பராமரிக்க, ஜாவாஸ்கிரிப்ட் குறியீடு விரைவாகவும் திறமையாகவும் செயல்பட வேண்டும் மற்றும் தேவையான போது தனித்தனி நூல்களுக்கு நேரம் எடுக்கும் செயல்பாடுகளை வழங்க வேண்டும்.
+
+## எடுத்துக்காட்டு
+
+```javascript
+// கால்பேக்குடன் ஒத்திசைவற்ற செயல்பாடை (asynchronous operation) உருவகப்படுத்துதல்
+function simulateAsyncOperation(callback) {
+ setTimeout(function () {
+ console.log("ஒத்திசைவற்ற செயல்பாடு முடிந்தது (Async operation completed).");
+ callback();
+ }, 2000); // 2-வினாடி தாமதத்தை உருவகப்படுத்துதல்
+}
+
+console.log("நிரலின் தொடக்கம் (Start of the program)");
+
+// ஒத்திசைவற்ற செயல்பாடைத் தொடங்குதல்
+simulateAsyncOperation(function () {
+ console.log("கால்பேக் செயல்படுத்தப்பட்டது: முடிவைக் கையாளுதல் (Callback executed: Handling the result).");
+});
+
+console.log("நிரலின் முடிவு (End of the program)");
+```
+
+இந்த எடுத்துக்காட்டில், ஜாவாஸ்கிரிப்ட்டின் ஒற்றை நூல் தன்மை மற்றும் கால்பேக்குகளைப் (callbacks) பயன்படுத்தி ஒத்திசைவற்ற செயல்பாடுகளை அது எவ்வாறு கையாளுகிறது என்பதை விளக்குகிறோம்.
+
+### குறியீடு விளக்கம் (Code Explanation):
+
+- `setTimeout` ஐப் பயன்படுத்தி ஒத்திசைவற்ற செயல்பாட்டை உருவகப்படுத்தும் `simulateAsyncOperation` செயல்பாட்டை (function) நாங்கள் வரையறுக்கிறோம். இந்தச் செயல்பாடு ஒரு கால்பேக்கை ஒரு வாதமாக (argument) எடுத்துக்கொள்கிறது, இது ஒத்திசைவற்ற செயல்பாடு முடிவடையும் போது செயல்படுத்தப்படும்.
+
+- "நிரலின் தொடக்கம் (Start of the program)" என்பதை உள்நுழைவதன் (logging) மூலம் நிரலைத் தொடங்குகிறோம்.
+
+- `simulateAsyncOperation` ஐப் பயன்படுத்தி, கால்பேக் செயல்பாட்டைக் கடந்து (passing), ஒத்திசைவற்ற செயல்பாட்டைத் தொடங்குகிறோம். இந்தச் செயல்பாடு 2-வினாடி தாமதத்திற்குப் பிறகு செயல்படுத்தப்படும்.
+
+- ஒத்திசைவற்ற செயல்பாட்டைத் தொடங்கிய உடனேயே, "நிரலின் முடிவு (End of the program)" என்பதை உள்நுழைகிறோம்.
+
+### செயலாக்க ஓட்டம் (Execution Flow):
+
+- இந்த குறியீட்டை நீங்கள் இயக்கும்போது, ஒத்திசைவற்ற செயல்பாடு முடிவதற்கு 2 வினாடிகள் எடுத்தாலும், நிரல் தடுப்பதில்லை (does not block) என்பதை நீங்கள் கவனிப்பீர்கள். "நிரலின் முடிவு (End of the program)" செய்தியானது ஒத்திசைவற்ற செயல்பாட்டைத் தொடங்கிய உடனேயே உள்நுழைந்து, ஜாவாஸ்கிரிப்ட்டின் தடுக்காத நடத்தையை (non-blocking behavior) விளக்குகிறது.
+
+- 2-வினாடி தாமதத்திற்குப் பிறகு, "ஒத்திசைவற்ற செயல்பாடு முடிந்தது (Async operation completed)" செய்தி உள்நுழையும், அதைத் தொடர்ந்து "கால்பேக் செயல்படுத்தப்பட்டது: முடிவைக் கையாளுதல் (Callback executed: Handling the result)", ஒத்திசைவற்ற செயல்பாடு முடிந்ததும் கால்பேக் செயல்பாடு செயல்படுத்தப்பட்டதைக் குறிக்கிறது.
+
+### முக்கியத் தகவல்கள் (Key Takeaways):
+
+- ஜாவாஸ்கிரிப்ட் ஒற்றை நூலில் (single thread) இயங்குகிறது, மேலும் ஒத்திசைவற்ற செயல்பாடுகள் கால்பேக்குகள் மூலம் கையாளப்படுகின்றன.
+
+- ஒற்றை நூல் தன்மையானது அதிக நேரம் எடுத்துக்கொள்ளும் பணிகளின் போதும் ஜாவாஸ்கிரிப்ட் பதிலளிக்கக்கூடியதாக (responsive) இருக்க அனுமதிக்கிறது.
+
+- ஜாவாஸ்கிரிப்ட்டில் ஒத்திசைவற்ற குறியீட்டுடன் வேலை செய்வதற்கான அடிப்படை வழிமுறையாகக் கால்பேக்குகள் (Callbacks) உள்ளன.
+
+## நன்மைகள் மற்றும் சவால்கள் (Benefits and Challenges)
+
+### நன்மைகள்:
+
+- **எளிமை (Simplicity):** ஒற்றை-நூல் செயலாக்கமானது நிரலாக்க மாதிரியை (programming model) எளிதாக்குகிறது மற்றும் சிக்கலான ஒருங்கிணைப்பு (concurrency) தொடர்பான பிழைகளின் (bugs) அபாயத்தைக் குறைக்கிறது.
+- **கணிப்புத்தன்மை (Predictability):** ஒற்றை நூல் தன்மை, செயல்படுத்தும் வரிசை (order of execution) மற்றும் உங்கள் நிரலின் நிலை குறித்துக் காரணத்தைக் கூறுவதை (reason about) எளிதாக்குகிறது.
+
+### சவால்கள்:
+
+- **தடுக்கும் செயல்பாடுகள் (Blocking Operations):** நீண்ட நேரம் இயங்கும் செயல்பாடுகள் முக்கிய நூலைத் தடுக்கலாம், இது மோசமான பயனர் அனுபவத்திற்கு வழிவகுக்கும், குறிப்பாக வலைப் பயன்பாடுகளில்.
+- **கால்பேக் நரகம் (Callback Hell):** கால்பேக்குகளை அதிகமாகப் பயன்படுத்துவது (பெரும்பாலும் "கால்பேக் நரகம்" என்று குறிப்பிடப்படுகிறது) குறியீட்டைப் படிக்கவும் பராமரிக்கவும் கடினமாக்கும்.
+- **ஒருங்கிணைப்பு இடையூறு (Concurrency Bottleneck):** ஜாவாஸ்கிரிப்ட் ஒற்றை நூலில் இயங்குவதால் CPU-பிணைக்கப்பட்ட (CPU-bound) பணிகளால் பல மையச் செயலிகளை (multi-core processors) முழுமையாகப் பயன்படுத்த முடியாது.
+
+
+ஜாவாஸ்கிரிப்ட்டின் ஒற்றை நூல் தன்மை மொழியின் வரையறுக்கும் அம்சமாகும். இது நிரலாக்கத்தின் சில அம்சங்களை எளிதாக்கும் அதே வேளையில், ஒத்திசைவற்ற பணிகளைக் கையாள்வது மற்றும் பதிலளிக்கக்கூடிய பயன்பாடுகளை (responsive applications) உறுதி செய்வது போன்ற சவால்களை அளிக்கிறது. ஜாவாஸ்கிரிப்ட் டெவலப்பர்களுக்கு ஒத்திசைவற்ற வடிவங்களின் (asynchronous patterns) பயனுள்ள பயன்பாடு மற்றும் நிகழ்வு உந்துதல் மாதிரியைப் (event-driven model) புரிந்துகொள்வது அவசியம்.
diff --git a/ta/miscellaneous/template-literals.md b/ta/miscellaneous/template-literals.md
new file mode 100644
index 00000000..1cce9fac
--- /dev/null
+++ b/ta/miscellaneous/template-literals.md
@@ -0,0 +1,34 @@
+---
+chapter: 19
+pageNumber: 113
+description: டெம்ப்ளேட் லிட்டரல்கள் (Template literals) என்பவை பேக்டிக் `(``)` உடன் பிரிக்கப்பட்ட லிட்டரல்கள் (literals) மற்றும் சரங்களில் (strings) மாறி (variable) மற்றும் கோவை இடைக்கணிப்பில் (expression interpolation) பயன்படுத்தப்படுகின்றன.
+---
+# டெம்ப்ளேட் லிட்டரல்கள் (Template Literals)
+
+டெம்ப்ளேட் லிட்டரல்கள் (Template literals) என்பவை பேக்டிக் `(``)` உடன் பிரிக்கப்பட்ட லிட்டரல்கள் மற்றும் சரங்களில் (strings) மாறி மற்றும் கோவை இடைக்கணிப்பில் பயன்படுத்தப்படுகின்றன.
+
+```javascript
+let text1 = `Hello World!`;
+// ஒரு சரத்தில் (single string) ஒற்றை மற்றும் இரட்டை மேற்கோள்களுடன் (single and double quotes) டெம்ப்ளேட் லிட்டரல்கள் (template literals)
+let text2 = `He's often called "Johnny"`;
+// பல் வரி சரங்களுடன் (multiline strings) டெம்ப்ளேட் லிட்டரல்கள்
+let text3 =
+`The quick
+brown fox
+jumps over
+the lazy dog`;
+
+// மாறி இடைக்கணிப்புடன் (variable interpolation) டெம்ப்ளேட் லிட்டரல்கள்
+const firstName = "John";
+const lastName = "Doe";
+
+const welcomeText = `Welcome ${firstName}, ${lastName}!`;
+
+// கோவை இடைக்கணிப்புடன் (expression interpolation) டெம்ப்ளேட் லிட்டரல்கள்
+const price = 10;
+const VAT = 0.25;
+
+const total = `Total: ${(price * (1 + VAT)).toFixed(2)}`;
+```
+
+
diff --git a/ta/miscellaneous/testing.md b/ta/miscellaneous/testing.md
new file mode 100644
index 00000000..02f44ead
--- /dev/null
+++ b/ta/miscellaneous/testing.md
@@ -0,0 +1,89 @@
+---
+chapter: 19
+pageNumber: 139
+description: இந்த அத்தியாயத்தில், இணைய மேம்பாட்டில் சோதனையின் (testing) முக்கியமான அம்சங்களை ஆராய்வோம். வலைப் பயன்பாடுகளின் நம்பகத்தன்மை (reliability) மற்றும் செயல்பாட்டை (functionality) உறுதிப்படுத்த இந்தத் திறன்கள் இன்றியமையாதவை. பல்வேறு கருவிகள் (tools) மற்றும் கட்டமைப்புகளைப் (frameworks) பயன்படுத்தி யூனிட் சோதனையின் (unit testing) உலகத்தை ஆராய்வோம்.
+---
+
+## யூனிட் சோதனை (Unit Testing)
+யூனிட் சோதனை என்பது வலை மேம்பாட்டில் ஒரு அடிப்படை நடைமுறையாகும். தனிப்பட்ட கூறுகள் (components) அல்லது செயல்பாடுகள் (functions) எதிர்பார்த்தபடி இயங்குவதை உறுதிப்படுத்த அவற்றைச் சோதிப்பதை இது உள்ளடக்குகிறது. இந்த நடைமுறையானது சோதனை உந்துதல் மேம்பாடு (test-driven development - TDD) எனப்படும் மென்பொருள் மேம்பாட்டு அணுகுமுறையில் (software development approach) சேர்க்கப்பட்டுள்ளது, இது மென்பொருள் தேவைகளிலிருந்து முதலில் யூனிட் சோதனைகளை எழுதுவதையும் பின்னர் குறியீட்டை எழுதுவதையும் கொண்டுள்ளது. யூனிட் சோதனைகளை நாம் ஏன் எழுத வேண்டும் என்பதை இப்போது பார்ப்போம்.
+
+## யூனிட் சோதனைகளை ஏன் எழுத வேண்டும்?
+பின்வரும் காரணங்களால் யூனிட் சோதனை பரவலாகப் பயன்படுத்தப்படுகிறது:
+- TDD இல், மென்பொருள் தேவைகள் (software requirements) குறிப்பிட்ட சோதனை வழக்குகளாக (test cases) மாற்றப்படுகின்றன. புதிய சோதனைகளில் தேர்ச்சி பெற மென்பொருள் பின்னர் மேம்படுத்தப்படுகிறது.
+- குறியீட்டுத் தளத்தின் (codebase) தனிப்பட்ட பகுதிகள் சரியாகச் செயல்படுகின்றனவா என்பதைச் சரிபார்க்கும் பொருட்டு.
+- பிற யூனிட்கள் அல்லது மென்பொருளின் செயல்பாட்டைப் பாதிக்காமல் குறியீட்டு மாற்றத்தை (code modification) இது அனுமதிக்கிறது.
+- ரீஃபாக்டரிங் (refactoring) அல்லது மாற்றங்களைச் செய்யும்போது இது ஒரு பாதுகாப்பு வலையை (safety net) வழங்குகிறது.
+- செயல்பாடுகள் மற்றும் கூறுகளின் (components) எதிர்பார்க்கப்படும் நடத்தையை ஆவணப்படுத்த (document) இது உதவுகிறது.
+- ஒவ்வொரு மாட்யூலுக்கும் (module) அதன் சொந்தப் பொறுப்பு இருப்பதால் மாட்யூல்களின் மறுநிகழ்வு (repetition) இல்லாமல் இருக்க இது உதவுகிறது.
+
+## யூனிட் சோதனைகளின் நன்மைகள் (Benefits of Unit Tests)
+யூனிட் சோதனைகளின் முக்கிய நன்மை அவற்றின் லேசர்-கூர்மையான (laser-sharp) கவனம் ஆகும். அவர்கள் ஒற்றைச் செயல்பாட்டைச் சோதிப்பதால், அவை துல்லியமான பின்னூட்டத்தை (feedback) அளிக்கின்றன. ஒரு யூனிட் சோதனை தோல்வியுற்றால், பெரும்பாலான சந்தர்ப்பங்களில், சோதிக்கப்படும் குறிப்பிட்ட செயல்பாடே பிரச்சனை என்பதை நீங்கள் உறுதியாக நம்பலாம்.
+- பிழைகளை (bugs) விரைவாகவும் எளிதாகவும் கண்டறிந்து சரிசெய்ய யூனிட் சோதனைகள் உதவுகின்றன.
+- யூனிட் சோதனைகள் உயர்ந்த குறியீடு தரத்திற்கு (code quality) பங்களிக்கின்றன.
+- சிறந்த பயன்பாட்டுக் கட்டமைப்புக்கு (application architecture) யூனிட் சோதனைகள் பங்களிக்கின்றன.
+- யூனிட் சோதனைகள் ஆவணங்களாகச் (documentation) செயல்படுகின்றன.
+
+## யூனிட் சோதனைகளை உருவாக்குவதற்கான சிறந்த நடைமுறைகள் (Best Practices for creating Unit Tests)
+உங்களிடம் நல்ல யூனிட் சோதனைகள் இருப்பதை உறுதிசெய்ய இந்தச் சிறந்த நடைமுறைகளைப் பின்பற்றவும்:
+- மேம்பாட்டின் (development) போது சோதனைகளை எழுதுங்கள், அதற்குப் பிறகு அல்ல
+- சோதனை வழக்குகள் (Test cases) செயல்படுத்தும் தர்க்கத்தை (implementation logic) நகலெடுக்கக் (duplicate) கூடாது.
+- சோதனை வழக்குகள் அவற்றின் குறியீடு மாறாத வரை ஒரே நடத்தையை (behavior) வெளிப்படுத்த வேண்டும்.
+- சோதனை வழக்குகளுக்கு நிலையான பெயரிடும் மாநாட்டைப் (naming convention) பயன்படுத்தவும்
+- யூனிட் சோதனைகளில் நிபந்தனைக்குட்பட்ட தர்க்க வெளிப்பாடுகளைப் (conditional logic expressions) பயன்படுத்துவதைத் தவிர்க்கவும்
+- முடிந்தால் யூனிட் சோதனைகளைத் தானியங்குபடுத்தவும் (automate)
+
+## சோதனைக் கட்டமைப்புகள் (Testing Frameworks)
+சோதனைக் கட்டமைப்புகள் சோதனைகளை எழுதுதல் மற்றும் இயக்கும் செயல்முறையை ஒழுங்குபடுத்துகின்றன. ஜாவாஸ்கிரிப்டில் Jest மற்றும் Mocha ஆகிய இரண்டும் பிரபலமான கட்டமைப்புகளாகும்.
+
+## Jest
+Jest என்பது பூஜ்ஜிய உள்ளமைவு (zero-config), ஆல்-இன்-ஒன் (all-in-one) பிரபலமான சோதனைக் கட்டமைப்பாகும். இது யூனிட் மற்றும் ஒருங்கிணைப்பு சோதனை (integration testing) ஆகிய இரண்டிற்கும் ஏற்றது. Jest உடன் எவ்வாறு தொடங்குவது என்று பார்ப்போம்.
+
+npm அல்லது yarn ஐப் பயன்படுத்தி Jest ஐ நிறுவவும்:
+
+```sh
+npm install --save-dev jest
+```
+
+நீங்கள் சோதிக்க விரும்பும் செயல்பாட்டிற்கான ஒரு சோதனைக் கோப்பை (எ.கா., `myFunction.test.js`) உருவாக்கவும்.
+
+Jest இன் சோதனைச் செயல்பாட்டைப் (test function) பயன்படுத்தி ஒரு சோதனை வழக்கை எழுதவும்:
+
+```javascript
+const myFunction = require('./myFunction');
+
+test('should return the sum of two numbers', () => {
+ expect(myFunction(2, 3)).toBe(5);
+});
+```
+jest கட்டளையைப் பயன்படுத்திச் சோதனைகளை இயக்கவும்:
+```sh
+npx jest
+```
+
+### Mocha
+Mocha ஒரு நெகிழ்வான சோதனைக் கட்டமைப்பாகும். இது சோதனைகளை இயக்குவதற்கான கட்டமைப்பை வழங்குகிறது, ஆனால் வலியுறுத்தல்கள் (assertions) மற்றும் கேலி (mocking) செய்யக் கூடுதல் நூலகங்கள் தேவை.
+
+Mocha உடன் தொடங்குதல் (Getting Started with Mocha)
+
+Mocha மற்றும் Chai போன்ற வலியுறுத்தல் நூலகத்தை நிறுவவும்:
+```sh
+npm install --save-dev mocha chai
+```
+ஒரு `test` கோப்பகத்தை (directory) உருவாக்கி உங்கள் சோதனைக் கோப்புகளைச் சேர்க்கவும்.
+
+Mocha இன் describe மற்றும் it செயல்பாடுகள் மற்றும் Chai இன் வலியுறுத்தல் செயல்பாடுகளைப் பயன்படுத்தி உங்கள் சோதனை வழக்குகளை எழுதுங்கள்.
+
+```javascript
+const chai = require('chai');
+const expect = chai.expect;
+const myFunction = require('./myFunction');
+
+describe('myFunction', () => {
+ it('should return the sum of two numbers', () => {
+ expect(myFunction(2, 3)).to.equal(5);
+ });
+});
+```
+
+
+வலை மேம்பாட்டில் சோதனையின் அடிப்படைகளை நாங்கள் ஆராய்ந்தோம் மற்றும் எந்த வலை டெவலப்பருக்கும் இன்றியமையாத யூனிட் சோதனை மற்றும் பிற சோதனைக் கட்டமைப்புகள் மற்றும் கருவிகளின் முக்கியத்துவத்தைப் பற்றி விவாதித்தோம். நிலையான பயிற்சி மற்றும் சரியான கருவிகளின் தொகுப்பிற்கான அணுகல் மூலம், ஒருவர் நம்பகமான குறியீட்டை எழுதலாம் மற்றும் பயன்பாடுகள் உகந்ததாகச் செயல்படுவதை உறுதிசெய்யலாம்.
diff --git a/ta/modules.md b/ta/modules.md
new file mode 100644
index 00000000..b369246a
--- /dev/null
+++ b/ta/modules.md
@@ -0,0 +1,78 @@
+---
+layout: editorial
+chapter: 13
+pageNumber: 87
+description: தொகுதிகள் (Modules) என்பவை குறியீட்டை தனித்தனி, மீண்டும் பயன்படுத்தக்கூடிய (reusable) மற்றும் இணைக்கப்பட்ட கூறுகளாக (encapsulated components) ஒழுங்கமைப்பதற்கான ஒரு வழியாகும். தொகுதிகள் டெவலப்பர்களை பெரிய மற்றும் சிக்கலான குறியீட்டுத் தளங்களை (codebases) சிறிய, நிர்வகிக்கக்கூடிய பகுதிகளாக உடைக்க அனுமதிக்கின்றன, இது திட்டங்களைப் புரிந்துகொள்வது, பராமரிப்பது மற்றும் ஒத்துழைப்பதை எளிதாக்குகிறது.
+---
+
+# அத்தியாயம் 13
+# தொகுதிகள் (Modules)
+
+நிஜ உலகில், ஒரு நிரல் புதிய செயல்பாட்டின் தேவைகளைச் சமாளிக்க இயற்கையாக வளர்கிறது. வளரும் குறியீட்டுத் தளத்துடன் குறியீட்டை அமைப்பதற்கும் பராமரிப்பதற்கும் கூடுதல் வேலை தேவைப்படுகிறது. எதிர்காலத்தில் இது பலன் தரும் என்றாலும், அதைப் புறக்கணித்து நிரல்களை ஆழமாகச் சிக்கலாக மாற்றுவது தூண்டக்கூடியதாக இருக்கும். யதார்த்தத்தில், இது பயன்பாட்டின் சிக்கலை (complexity) அதிகரிக்கிறது, ஏனெனில் ஒருவர் அமைப்பைப் பற்றிய ஒரு முழுமையான புரிதலை உருவாக்க நிர்ப்பந்திக்கப்படுகிறார் மற்றும் எந்தவொரு பகுதியையும் தனிமைப்படுத்திப் பார்க்க சிரமப்படுகிறார். இரண்டாவதாக, அதன் செயல்பாட்டைப் பயன்படுத்த ஒருவர் சிக்கலைத் தீர்ப்பதில் அதிக நேரத்தை முதலீடு செய்ய வேண்டும்.
+
+இந்த சிக்கல்களைத் தவிர்க்க _தொகுதிகள் (Modules)_ வருகின்றன. ஒரு `module` எந்தெந்தக் குறியீடு துண்டுகளைச் சார்ந்துள்ளது என்பதையும், பிற தொகுதிகள் பயன்படுத்துவதற்கு என்ன செயல்பாட்டை வழங்குகிறது என்பதையும் குறிப்பிடுகிறது. மற்றொரு தொகுதியைச் சார்ந்திருக்கும் தொகுதிகள் _சார்புகள் (dependencies)_ என்று அழைக்கப்படுகின்றன. குறியீட்டை தொகுதிகளாக ஒழுங்கமைக்கவும், தேவைக்கேற்ப அதை ஏற்றவும் பல்வேறு தொகுதி நூலகங்கள் (module libraries) உள்ளன.
+
+* **AMD** - பழமையான தொகுதி அமைப்புகளில் ஒன்று, ஆரம்பத்தில் [require.js](https://requirejs.org/) ஆல் பயன்படுத்தப்பட்டது.
+* **CommonJS** - Node.js சேவையகத்திற்காக (server) உருவாக்கப்பட்ட தொகுதி அமைப்பு.
+* **UMD** - [AMD](https://requirejs.org/docs/whyamd.html#amd) மற்றும் [CommonJS](https://requirejs.org/docs/whyamd.html#commonjs) உடன் இணக்கமான (compatible) தொகுதி அமைப்பு.
+
+தொகுதிகள் ஒன்றையொன்று ஏற்ற முடியும், மேலும் செயல்பாட்டைப் பரிமாறிக்கொள்ள `import` மற்றும் `export` என்ற சிறப்பு உத்தரவுகளைப் (directives) பயன்படுத்தலாம், மற்றும் ஒன்றோடொன்று செயல்பாடுகளை (functions) அழைக்கலாம்.
+
+* `export` - தற்போதைய தொகுதிக்கு வெளியே இருந்து அணுகக்கூடிய செயல்பாடுகள் மற்றும் மாறிகளை (variables) லேபிளிடுகிறது
+* `import` - வெளியிலுள்ள தொகுதியிலிருந்து செயல்பாட்டை இறக்குமதி செய்கிறது
+
+தொகுதிகளில் உள்ள `import` மற்றும் `export` பொறிமுறையைப் பார்ப்போம். `sayHi.js` கோப்பிலிருந்து `sayHi` செயல்பாடு ஏற்றுமதி செய்யப்பட்டுள்ளது (exported).
+
+```javascript
+// 📁 sayHi.js
+export const sayHi = (user) => {
+ alert(`வணக்கம், ${user}!`);
+}
+```
+
+`sayHi` செயல்பாடு `import` உத்தரவின் உதவியுடன் `main.js` கோப்பில் பயன்படுத்தப்படுகிறது.
+
+```javascript
+// 📁 main.js
+import {sayHi} from './sayHi.js';
+
+alert(sayHi); // செயல்பாடு (function)...
+sayHi('Kelvin'); // வணக்கம், Kelvin!
+```
+
+இங்கே, import உத்தரவு தொடர்புடைய பாதையை (relative path) இறக்குமதி செய்வதன் மூலம் தொகுதியை ஏற்றுகிறது மற்றும் `sayHi` மாறியை ஒதுக்குகிறது.
+
+தொகுதிகளை இரண்டு வழிகளில் ஏற்றுமதி செய்யலாம்: **Named (பெயரிடப்பட்டவை)** மற்றும் **Default (இயல்புநிலை)**. மேலும், Named ஏற்றுமதிகளை ஒரே வரியில் (inline) அல்லது தனித்தனியாக ஒதுக்கலாம்.
+
+```javascript
+// 📁 person.js
+
+// உள்ளமை (inlined) பெயரிடப்பட்ட ஏற்றுமதிகள்
+export const name = "Kelvin";
+export const age = 30;
+
+// ஒரேயடியாக (at once)
+const name = "Kelvin";
+const age = 30;
+export {name, age};
+```
+
+{% hint style="working" %}
+ஒரு கோப்பில் ஒரு இயல்புநிலை (default) `export` மட்டுமே இருக்க முடியும்.
+{% endhint %}
+
+// function hoisting
+const x = 20,
+ y = 10;
+
+let result = add(x,y); // ❌ Uncaught ReferenceError: add is not defined
+console.log(result);
+
+let add = (x, y) => x + y;
+
+
+ஏற்றுமதி வகையின் அடிப்படையில், நாம் அதை இரண்டு வழிகளில் இறக்குமதி செய்யலாம். பெயரிடப்பட்ட ஏற்றுமதி (named export) சுருள் அடைப்புக்குறிகளைப் (curly braces) பயன்படுத்தி கட்டமைக்கப்படுகிறது, அதேசமயம் இயல்புநிலை ஏற்றுமதிகள் (default exports) அவ்வாறு செய்யப்படுவதில்லை.
+
+```javascript
+import { name, age } from "./person.js"; // பெயரிடப்பட்ட ஏற்றுமதி இறக்குமதி
+import message from "./message.js"; // இயல்புநிலை ஏற்றுமதி இறக்குமதி
+```
+
+தொகுதிகளை ஒதுக்கும்போது, நாம் _சுழற்சி சார்பைத் (circular dependency)_ தவிர்க்க வேண்டும். சுழற்சி சார்பு என்பது தொகுதி `A` ஆனது `B` ஐச் சார்ந்திருக்கும், மற்றும் `B` ஆனது நேரடியாகவோ அல்லது மறைமுகமாகவோ `A` ஐச் சார்ந்திருக்கும் ஒரு சூழ்நிலையாகும்.
diff --git a/ta/numbers/README.md b/ta/numbers/README.md
new file mode 100644
index 00000000..0f73e58d
--- /dev/null
+++ b/ta/numbers/README.md
@@ -0,0 +1,46 @@
+---
+layout: editorial
+chapter: 3
+pageNumber: 18
+description: எண்கள் என்பது எண் மதிப்புகளை குறிக்க பயன்படுத்தப்படும் தரவு வகையை குறிக்கிறது. JavaScript இல் உள்ள எண்கள் முழு எண்களாக (whole numbers) அல்லது மிதவை-புள்ளி எண்களாக (decimal numbers) இருக்கலாம்.
+---
+
+# அத்தியாயம் 3
+# எண்கள்
+
+JavaScript இல் **ஒரே ஒரு வகை எண்** மட்டுமே உள்ளது – 64 bit float point. இது Java இன் `double` போன்றது. மற்ற பெரும்பாலான நிரலாக்க மொழிகளைப் போலல்லாமல், தனித்தனி முழு எண் வகை இல்லை, எனவே 1 மற்றும் 1.0 ஒரே மதிப்பு. எண்ணை உருவாக்குவது எளிது, `var` முக்கியசொல்லைப் பயன்படுத்தி வேறு எந்த மாறி வகைக்கும் போல செய்யலாம்.
+
+நிலையான மதிப்பிலிருந்து எண்களை உருவாக்கலாம்:
+
+```javascript
+// இது ஒரு float:
+let a = 1.2;
+
+// இது ஒரு முழு எண்:
+let b = 10;
+```
+
+அல்லது, வேறொரு மாறியின் மதிப்பிலிருந்து:
+
+```javascript
+let a = 2;
+let b = a;
+```
+
+முழு எண்களின் துல்லியம் 15 இலக்கங்கள் வரை துல்லியமாக இருக்கும் மற்றும் அதிகபட்சம் 17.
+
+```javascript
+let x = 999999999999999; // x இன் மதிப்பு 999999999999999 ஆகும்
+let y = 9999999999999999; // y இன் மதிப்பு 10000000000000000 ஆகும்
+```
+
+`0x` முன்னொட்டுடன் இருந்தால் எண் மாறிலிகள் hexadecimal ஆக விளக்கப்படுகின்றன.
+
+```javascript
+let z = 0xFF; // 255
+```
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளை ஆராய்வோம்:
+* [கணிதம்](./math.md)
+* [அடிப்படை ஆபரேட்டர்கள்](./operators.md)
+* [மேம்பட்ட ஆபரேட்டர்கள்](./advanced.md)
\ No newline at end of file
diff --git a/ta/numbers/advanced.md b/ta/numbers/advanced.md
new file mode 100644
index 00000000..a2b68dea
--- /dev/null
+++ b/ta/numbers/advanced.md
@@ -0,0 +1,112 @@
+---
+chapter: 3
+pageNumber: 28
+description: தரவில் அடிப்படை கணிதம் மற்றும் தர்க்க செயல்பாடுகளுக்கு அப்பால் சக்திவாய்ந்த செயல்பாட்டை வழங்கும் பல மேம்பட்ட ஆபரேட்டர்கள் உள்ளன. இந்த மேம்பட்ட ஆபரேட்டர்கள் தரவை கையாளவும், bitwise செயல்பாடுகளை செய்யவும், பொருட்களுடன் பணிபுரியவும் மிகவும் உதவியாக இருக்கும்.
+---
+# மேம்பட்ட ஆபரேட்டர்கள்
+
+ஆபரேட்டர்கள் அடைப்புக்குறிகள் இல்லாமல் ஒன்றாக வரும்போது, அவை பயன்படுத்தப்படும் வரிசை ஆபரேட்டர்களின் _முன்னுரிமை_ மூலம் தீர்மானிக்கப்படுகிறது. பெருக்கல் `(*)` மற்றும் வகுத்தல் `(/)` கூட்டல் `(+)` மற்றும் கழித்தல் `(-)` ஐ விட அதிக முன்னுரிமை கொண்டவை.
+
+```javascript
+// பெருக்கல் முதலில் செய்யப்படுகிறது, பின்னர் கூட்டல் வருகிறது
+let x = 100 + 50 * 3; // 250
+// அடைப்புக்குறிகளுடன் அடைப்புக்குறிகளுக்குள் உள்ள செயல்பாடுகள் முதலில் கணக்கிடப்படுகின்றன
+let y = (100 + 50) * 3; // 450
+// ஒரே முன்னுரிமை கொண்ட செயல்பாடுகள் இடமிருந்து வலமாக கணக்கிடப்படுகின்றன
+let z = 100 / 50 * 3;
+```
+
+நிரல் எழுதும்போது பல மேம்பட்ட கணித ஆபரேட்டர்களைப் பயன்படுத்தலாம். சில முக்கிய மேம்பட்ட கணித ஆபரேட்டர்களின் பட்டியல்:
+
+* **Modulo ஆபரேட்டர் (`%`)**: Modulo ஆபரேட்டர் ஒரு வகுத்தல் செயல்பாட்டின் மீதியை திரும்பப் பெறுகிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(10 % 3); // 1
+console.log(11 % 3); // 2
+console.log(12 % 3); // 0
+```
+
+* **Exponentiation ஆபரேட்டர் (\* *)**: Exponentiation ஆபரேட்டர் ஒரு எண்ணை மற்றொரு எண்ணின் சக்தியாக உயர்த்துகிறது. இது ஒரு புதிய ஆபரேட்டர் மற்றும் அனைத்து உலாவிகளிலும் ஆதரிக்கப்படவில்லை, எனவே `Math.pow` செயல்பாட்டை பதிலாக பயன்படுத்த வேண்டியிருக்கலாம். எடுத்துக்காட்டாக:
+
+```javascript
+console.log(2 ** 3); // 8
+console.log(3 ** 2); // 9
+console.log(4 ** 3); // 64
+```
+
+* **Increment ஆபரேட்டர் (`++`)**: Increment ஆபரேட்டர் ஒரு எண்ணை ஒன்றால் அதிகரிக்கிறது. இதை prefix (operand க்கு முன்பு) அல்லது postfix (operand க்கு பிறகு) ஆக பயன்படுத்தலாம். எடுத்துக்காட்டாக:
+
+```javascript
+let x = 1;
+x++; // x இப்போது 2
+++x; // x இப்போது 3
+```
+
+* **Decrement ஆபரேட்டர் (`--`)**: Decrement ஆபரேட்டர் ஒரு எண்ணை ஒன்றால் குறைக்கிறது. இதை prefix (operand க்கு முன்பு) அல்லது postfix (operand க்கு பிறகு) ஆக பயன்படுத்தலாம். எடுத்துக்காட்டாக:
+
+```javascript
+let y = 3;
+y--; // y இப்போது 2
+--y; // y இப்போது 1
+```
+
+* **Math பொருள்**: `Math` பொருள் JavaScript இல் கணித செயல்பாடுகள் மற்றும் மாறிலிகளை வழங்கும் ஒரு உள்ளமைக்கப்பட்ட பொருளாகும். ஒரு எண்ணின் வர்க்கமூலத்தை கண்டுபிடிக்க, ஒரு எண்ணின் sine ஐ கணக்கிட, அல்லது சீரற்ற எண்ணை உருவாக்க போன்ற மேம்பட்ட கணித செயல்பாடுகளை செய்ய `Math` பொருளின் முறைகளைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக:
+
+```javascript
+console.log(Math.sqrt(9)); // 3
+console.log(Math.sin(0)); // 0
+console.log(Math.random()); // 0 மற்றும் 1 க்கு இடையே சீரற்ற எண்
+```
+
+இவை JavaScript இல் கிடைக்கும் மேம்பட்ட கணித ஆபரேட்டர்கள் மற்றும் செயல்பாடுகளின் சில எடுத்துக்காட்டுகள் மட்டுமே. நிரல் எழுதும்போது மேம்பட்ட கணித செயல்பாடுகளை செய்ய பயன்படுத்தக்கூடிய இன்னும் பல உள்ளன.
+
+{% exercise %}
+`num1` மற்றும் `num2` இல் செயல்பாடுகளை செய்ய பின்வரும் மேம்பட்ட ஆபரேட்டர்களைப் பயன்படுத்தவும்.
+
+{% initial %}
+let num1 = 10;
+let num2 = 5;
+
+// num1 இன் மதிப்பை அதிகரிக்க ++ ஆபரேட்டர்.
+const result1 =
+// num2 இன் மதிப்பை குறைக்க -- ஆபரேட்டர்.
+const result2 =
+// num1 உடன் num2 ஐ கூட்ட += ஆபரேட்டர்.
+const result3 =
+// num1 இலிருந்து num2 ஐ கழிக்க -= ஆபரேட்டர்.
+const result4 =
+
+{% solution %}
+let num1 = 10;
+let num2 = 5;
+
+// num1 இன் மதிப்பை அதிகரிக்க ++ ஆபரேட்டர்.
+
+num1++;
+const result1 = num1; // 11
+// num2 இன் மதிப்பை குறைக்க -- ஆபரேட்டர்.
+num2--;
+const result2 = num2; // 4
+// num1 உடன் num2 ஐ கூட்ட += ஆபரேட்டர்.
+num1 += num2;
+const result3 = num1 // 15
+// num1 இலிருந்து num2 ஐ கழிக்க -= ஆபரேட்டர்.
+num1 -= num2;
+const result4 = num1 // 11
+
+{% validation %}
+assert(result1 === 11 && result2 === 4 && result3 === 15 && result4 === 11 );
+
+{% context %}
+{% endexercise %}
+
+## Nullish coalescing ஆபரேட்டர் '??'
+
+`nullish` coalescing ஆபரேட்டர் முதல் வாதம் `null/undefined` இல்லை என்றால் அதை திரும்பப் பெறுகிறது, இல்லையெனில் இரண்டாவதை. இது இரண்டு கேள்விக்குறிகளாக `??` எழுதப்படுகிறது. `x ?? y` இன் முடிவு:
+
+* `x` வரையறுக்கப்பட்டிருந்தால், `x`,
+* `y` வரையறுக்கப்படவில்லை என்றால், `y`.
+
+{% hint style="info" %}
+இது மொழிக்கு சமீபத்திய சேர்க்கை மற்றும் பழைய உலாவிகளை ஆதரிக்க polyfills தேவைப்படலாம்
+{% endhint %}
diff --git a/ta/numbers/math.md b/ta/numbers/math.md
new file mode 100644
index 00000000..d2040ed1
--- /dev/null
+++ b/ta/numbers/math.md
@@ -0,0 +1,73 @@
+---
+chapter: 3
+pageNumber: 19
+description: Math பொருள் JavaScript இல் கணித செயல்பாடுகளை செய்ய அனுமதிக்கிறது. இது நிலையானது மற்றும் constructor இல்லை. முதலில் ஒரு Math பொருளை உருவாக்காமல் Math பொருளின் முறை மற்றும் பண்புகளை பயன்படுத்தலாம்.
+---
+
+# கணிதம்
+
+`Math` பொருள் JavaScript இல் கணித செயல்பாடுகளை செய்ய அனுமதிக்கிறது. இது நிலையானது மற்றும் constructor இல்லை. முதலில் ஒரு Math பொருளை உருவாக்காமல் Math பொருளின் முறை மற்றும் பண்புகளை பயன்படுத்தலாம். அதன் பண்பை அணுக _Math.property_ ஐப் பயன்படுத்தலாம். சில math பண்புகள் கீழே விவரிக்கப்பட்டுள்ளன:
+
+```javascript
+Math.E; // Euler's எண்ணை திரும்பப் பெறுகிறது
+Math.PI; // PI ஐ திரும்பப் பெறுகிறது
+Math.SQRT2; // 2 இன் வர்க்கமூலத்தை திரும்பப் பெறுகிறது
+Math.SQRT1_2; // 1/2 இன் வர்க்கமூலத்தை திரும்பப் பெறுகிறது
+Math.LN2; // 2 இன் இயல்பு மடக்கையை திரும்பப் பெறுகிறது
+Math.LN10; // 10 இன் இயல்பு மடக்கையை திரும்பப் பெறுகிறது
+Math.LOG2E; // E இன் அடிப்படை 2 மடக்கையை திரும்பப் பெறுகிறது
+Math.LOG10E; // E இன் அடிப்படை 10 மடக்கையை திரும்பப் பெறுகிறது
+```
+
+சில math முறைகளின் எடுத்துக்காட்டுகள்:
+
+```javascript
+Math.pow(8, 2); // 64
+Math.round(4.6); // 5
+Math.ceil(4.9); // 5
+Math.floor(4.9); // 4
+Math.trunc(4.9); // 4
+Math.sign(-4); // -1
+Math.sqrt(64); // 8
+Math.abs(-4.7); // 4.7
+Math.sin((90 * Math.PI) / 180); // 1 (90 டிகிரியின் sine)
+Math.cos((0 * Math.PI) / 180); // 1 (0 டிகிரியின் cos)
+Math.min(0, 150, 30, 20, -8, -200); // -200
+Math.max(0, 150, 30, 20, -8, -200); // 150
+Math.random(); // 0.44763808380924375
+Math.log(2); // 0.6931471805599453
+Math.log2(8); // 3
+Math.log10(1000); // 3
+```
+
+math முறைகளை அணுக, தேவைப்படும் இடங்களில் வாதங்களுடன் அதன் முறைகளை நேரடியாக அழைக்கலாம்.
+
+| முறை | விளக்கம் |
+| ------------------ | ------------------------------------------------------------------------------- |
+| `abs(x)` | `x` இன் முழுமதிப்பை திரும்பப் பெறுகிறது |
+| `acos(x)` | `x` இன் arccosine ஐ, radians இல் திரும்பப் பெறுகிறது |
+| `acosh(x)` | `x` இன் hyperbolic arccosine ஐ திரும்பப் பெறுகிறது |
+| `asin(x)` | `x` இன் arcsine ஐ, radians இல் திரும்பப் பெறுகிறது |
+| `asinh(x)` | `x` இன் hyperbolic arcsine ஐ திரும்பப் பெறுகிறது |
+| `atan(x)` | `-PI/2` மற்றும் `PI/2` radians க்கு இடையே எண் மதிப்பாக `x` இன் arctangent ஐ திரும்பப் பெறுகிறது |
+| `atan2(y,x)` | அதன் வாதங்களின் ஈவுத்தொகையின் arctangent ஐ திரும்பப் பெறுகிறது |
+| `atanh(x)` | `x` இன் hyperbolic arctangent ஐ திரும்பப் பெறுகிறது |
+| `crbt(x)` | `x` இன் கனமூலத்தை திரும்பப் பெறுகிறது |
+| `ceil(x)` | `x` இன் அருகிலுள்ள முழு எண்ணுக்கு மேல்நோக்கி வட்டமாக்கப்பட்டதை திரும்பப் பெறுகிறது |
+| `cos(x)` | `x` இன் cosine ஐ, radians இல் திரும்பப் பெறுகிறது |
+| `cosh(x)` | `x` இன் hyperbolic cosine ஐ திரும்பப் பெறுகிறது |
+| `exp(x)` | `x` இன் exponential மதிப்பை திரும்பப் பெறுகிறது |
+| `floor(x)` | `x` இன் அருகிலுள்ள முழு எண்ணுக்கு கீழ்நோக்கி வட்டமாக்கப்பட்டதை திரும்பப் பெறுகிறது |
+| `log(x)` | `x` இன் இயல்பு மடக்கையை திரும்பப் பெறுகிறது |
+| `max(x,y,z,... n)` | அதிக மதிப்பு கொண்ட எண்ணை திரும்பப் பெறுகிறது |
+| `min(x,y,z,... n)` | குறைந்த மதிப்பு கொண்ட எண்ணை திரும்பப் பெறுகிறது |
+| `pow(x,y)` | `y` இன் சக்தியில் `x` இன் மதிப்பை திரும்பப் பெறுகிறது |
+| `random()` | 0 மற்றும் 1 க்கு இடையே உள்ள எண்ணை திரும்பப் பெறுகிறது |
+| `round(x)` | அருகிலுள்ள `x` க்கு எண்ணை வட்டமாக்குகிறது |
+| `sign(x)` | x எதிர்மறை, `null` அல்லது நேர்மறை என்றால் திரும்பப் பெறுகிறது (-1,0,1) |
+| `sin(x)` | `x` இன் sine ஐ, radians இல் திரும்பப் பெறுகிறது |
+| `sinh(x)` | `x` இன் hyperbolic sine ஐ திரும்பப் பெறுகிறது |
+| `sqrt(x)` | `x` இன் வர்க்கமூலத்தை திரும்பப் பெறுகிறது |
+| `tan(x)` | ஒரு கோணத்தின் tangent ஐ திரும்பப் பெறுகிறது |
+| `tanh(x)` | `x` இன் hyperbolic tangent ஐ திரும்பப் பெறுகிறது |
+| `trunc(x)` | ஒரு எண்ணின் (`x`) முழு எண் பகுதியை திரும்பப் பெறுகிறது |
diff --git a/ta/numbers/operators.md b/ta/numbers/operators.md
new file mode 100644
index 00000000..e9272bd2
--- /dev/null
+++ b/ta/numbers/operators.md
@@ -0,0 +1,397 @@
+---
+chapter: 3
+pageNumber: 21
+description: ஆபரேட்டர்கள் மாறிகள், மதிப்புகள் அல்லது வெளிப்பாடுகள் போன்ற தரவில் செயல்பாடுகளை செய்ய பயன்படுத்தப்படும் சின்னங்கள் அல்லது முக்கியசொற்கள். அவை மொழியின் அவசியமான பகுதி மற்றும் டெவலப்பர்களை கணிதம், ஒப்பீடு, தர்க்கம், ஒதுக்கீடு மற்றும் பிற செயல்பாடுகளை செய்ய அனுமதிக்கின்றன.
+---
+
+# அடிப்படை ஆபரேட்டர்கள்
+
+JavaScript இல், ஒரு ஆபரேட்டர் என்பது operands (மதிப்புகள் மற்றும் மாறிகள்) இல் செயல்பாடுகளை செய்ய பயனர் பயன்படுத்தும் ஒரு சின்னம் அல்லது முக்கியசொல். எடுத்துக்காட்டாக:
+
+```javascript
+2 + 3; //5
+```
+
+இங்கே `+` கூட்டலை செய்யும் ஆபரேட்டர், மற்றும் `2` மற்றும் `3` operands.
+
+## ஆபரேட்டர்களின் வகைகள்
+
+JavaScript ஆல் ஆதரிக்கப்படும் பல்வேறு ஆபரேட்டர்கள் உள்ளன. அவை பின்வருமாறு:
+
+- [கணித ஆபரேட்டர்கள்](#arithmetic-operators)
+- [ஒதுக்கீடு ஆபரேட்டர்கள்](#assignment-operators)
+- [ஒப்பீடு ஆபரேட்டர்கள்](#Comparison-operators)
+- [தர்க்க ஆபரேட்டர்கள்](#logical-operators)
+- [Ternary ஆபரேட்டர்கள்](#ternary-operators)
+- [Bitwise ஆபரேட்டர்கள்](#bitwise-operators)
+- [`typeof` ஆபரேட்டர்கள்](#typeof-operators)
+
+### கணித ஆபரேட்டர்கள்
+
+கணித ஆபரேட்டர்கள் மதிப்புகளில் கணித செயல்பாடுகளை செய்ய பயன்படுத்தப்படுகின்றன. அவை உள்ளடக்குகின்றன:
+
+- [கூட்டல் (`+`) ஆபரேட்டர்](#addition-operator)
+- [கழித்தல் (`-`) ஆபரேட்டர்](#subtraction-operator)
+- [பெருக்கல் (`*`) ஆபரேட்டர்](#multiplication-operator)
+- [வகுத்தல் (`/`) ஆபரேட்டர்](#multiplication-operator)
+- [மீதி (`%`) ஆபரேட்டர்](#remainder-operator)
+
+#### கூட்டல் ஆபரேட்டர் (`+`)
+
+கூட்டல் ஆபரேட்டர் இரண்டு எண்களை கூட்டுகிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(1 + 2); // 3
+console.log(1 + -2); // -1
+```
+
+#### கழித்தல் ஆபரேட்டர் (`-`)
+
+கழித்தல் ஆபரேட்டர் ஒரு எண்ணிலிருந்து மற்றொரு எண்ணை கழிக்கிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(3 - 2); // 1
+console.log(3 - -2); // 5
+```
+
+#### பெருக்கல் ஆபரேட்டர் (`*`)
+
+பெருக்கல் ஆபரேட்டர் இரண்டு எண்களை பெருக்குகிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(2 * 3); // 6
+console.log(2 * -3); // -6
+```
+
+#### வகுத்தல் ஆபரேட்டர் (`/`)
+
+வகுத்தல் ஆபரேட்டர் ஒரு எண்ணை மற்றொரு எண்ணால் வகுக்கிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(6 / 2); // 3
+console.log(6 / -2); // -3
+```
+
+#### மீதி ஆபரேட்டர் (`%`)
+
+மீதி ஆபரேட்டர் ஒரு வகுத்தல் செயல்பாட்டின் மீதியை திரும்பப் பெறுகிறது. எடுத்துக்காட்டாக:
+
+```javascript
+console.log(10 % 3); // 1
+console.log(11 % 3); // 2
+console.log(12 % 3); // 0
+```
+
+JavaScript மொழிபெயர்ப்பாளர் இடமிருந்து வலமாக செயல்படுகிறது. வெளிப்பாடுகளை பிரிக்கவும் குழுவாக்கவும் கணிதத்தில் போல அடைப்புக்குறிகளைப் பயன்படுத்தலாம்: `c = (a / b) + d`
+
+{% hint style="working" %}
+JavaScript கூட்டல் மற்றும் இணைப்பு இரண்டிற்கும் `+` ஆபரேட்டரைப் பயன்படுத்துகிறது. எண்கள் கூட்டப்படுகின்றன, சரங்கள் இணைக்கப்படுகின்றன.
+{% endhint %}
+
+`NaN` என்பது ஒரு எண் சட்டபூர்வமான எண் அல்ல என்பதை சுட்டும் ஒரு ஒதுக்கப்பட்ட வார்த்தை, இது எண் அல்லாத சரத்துடன் கணிதம் செய்யும்போது `NaN` (Not a Number) ஐ விளைவிக்கும்.
+
+```javascript
+let x = 100 / "10";
+```
+
+`parseInt` முறை ஒரு மதிப்பை சரமாக பார்ஸ் செய்து முதல் முழு எண்ணை திரும்பப் பெறுகிறது.
+
+```javascript
+parseInt("10"); // 10
+parseInt("10.00"); // 10
+parseInt("10.33"); // 10
+parseInt("34 45 66"); // 34
+parseInt(" 60 "); // 60
+parseInt("40 years"); //40
+parseInt("He was 40"); //NaN
+```
+
+JavaScript இல், மிகப் பெரிய சாத்தியமான எண்ணுக்கு வெளியே ஒரு எண்ணை கணக்கிட்டால் `Infinity` திரும்பப் பெறுகிறது.
+
+```javascript
+let x = 2 / 0; // Infinity
+let y = -2 / 0; // -Infinity
+```
+
+{% exercise %}
+`num1` மற்றும் `num2` இல் பின்வரும் செயல்பாடுகளை செய்ய +, -, \*, /, மற்றும் % கணித ஆபரேட்டர்களைப் பயன்படுத்தவும்.
+
+{% initial %}
+let num1 = 10;
+let num2 = 5;
+
+// num1 மற்றும் num2 ஐ கூட்டவும்.
+let addResult =
+// num1 இலிருந்து num2 ஐ கழிக்கவும்.
+let subtractResult =
+// num1 மற்றும் num2 ஐ பெருக்கவும்.
+let multiplyResult =
+// num1 ஐ num2 ஆல் வகுக்கவும்.
+let divideResult =
+// num1 num2 ஆல் வகுக்கப்படும்போது மீதியை கண்டுபிடிக்கவும்.
+let reminderResult =
+
+{% solution %}
+let num1 = 10;
+let num2 = 5;
+
+// num1 மற்றும் num2 ஐ கூட்டவும்.
+let addResult = (num1 + num2);
+// num1 இலிருந்து num2 ஐ கழிக்கவும்.
+let subtractResult = (num1 - num2);
+// num1 மற்றும் num2 ஐ பெருக்கவும்.
+let multiplyResult = (num1 \* num2);
+// num1 ஐ num2 ஆல் வகுக்கவும்.
+let divideResult = (num1 / num2);
+// num1 num2 ஆல் வகுக்கப்படும்போது மீதியை கண்டுபிடிக்கவும்.
+let reminderResult = (num1 % num2);
+
+{% validation %}
+assert(addResult === 15 && subtractResult === 5 && multiplyResult === 50 && divideResult === 2 && reminderResult === 0 );
+
+{% context %}
+{% endexercise %}
+
+### ஒதுக்கீடு ஆபரேட்டர்கள்
+
+ஒதுக்கீடு ஆபரேட்டர்கள் மாறிகளுக்கு மதிப்புகளை ஒதுக்க அல்லது ஒதுக்கப்பட்ட மதிப்பை மதிப்பீடு செய்ய பயன்படுத்தப்படுகின்றன. _ஒரு மதிப்பை பல மதிப்புகளுக்கு ஒதுக்க ஒதுக்கீடு ஆபரேட்டரை சங்கிலியாக இணைக்கலாம்._ அவை ஒதுக்கீடு (`=`) ஆபரேட்டர் மற்றும் `+=`, `-=`, `*=` மற்றும் `/=` போன்ற கூட்டு ஒதுக்கீடு ஆபரேட்டர்களை உள்ளடக்குகின்றன.
+
+#### `=` (ஒதுக்கீடு ஆபரேட்டர்)
+
+இந்த ஆபரேட்டர் வலது பக்கத்தில் உள்ள மதிப்பை இடது பக்கத்தில் உள்ள மாறிக்கு ஒதுக்க பயன்படுத்தப்படுகிறது.
+எடுத்துக்காட்டுகள்:
+
+```javascript
+let x = 10; // மாறி x க்கு 10 மதிப்பை ஒதுக்குகிறது.
+```
+
+#### கூட்டு ஒதுக்கீடு ஆபரேட்டர்கள்
+
+இந்த ஆபரேட்டர்கள் கணித செயல்பாட்டை ஒதுக்கீடு செயல்பாட்டுடன் இணைக்கின்றன. ஒரு செயல்பாட்டை செய்து பின்னர் முடிவை மாறிக்கு திரும்ப ஒதுக்குவதற்கான குறுக்கு வழிகளாகும்.
+எடுத்துக்காட்டாக:
+
+##### `+=` (கூட்டல் ஒதுக்கீடு)
+
+வலது பக்கத்தில் உள்ள மதிப்பை மாறியுடன் கூட்டி முடிவை மாறிக்கு திரும்ப ஒதுக்குகிறது.
+
+##### `-=` (கழித்தல் ஒதுக்கீடு)
+
+மாறியிலிருந்து வலது பக்கத்தில் உள்ள மதிப்பை கழித்து முடிவை மாறிக்கு திரும்ப ஒதுக்குகிறது.
+
+##### `*=-` (பெருக்கல் ஒதுக்கீடு)
+
+மாறியை வலது பக்கத்தில் உள்ள மதிப்பால் பெருக்கி முடிவை மாறிக்கு திரும்ப ஒதுக்குகிறது.
+
+##### `/=` (வகுத்தல் ஒதுக்கீடு)
+
+மாறியை வலது பக்கத்தில் உள்ள மதிப்பால் வகுத்து முடிவை மாறிக்கு திரும்ப ஒதுக்குகிறது.
+
+##### `%=` (Modules/மீதி ஒதுக்கீடு)
+
+மாறியை வலது பக்கத்தில் உள்ள மதிப்பால் வகுக்கும்போது மீதியை கணக்கிட்டு முடிவை மாறிக்கு திரும்ப ஒதுக்குகிறது.
+
+```javascript
+let a = 10;
+a += 5; // a = a + 5; க்கு சமம் (a 15 ஆகிறது)
+a -= 3; // a = a - 3; க்கு சமம் (a 12 ஆகிறது)
+a *= 2; // a = a * 2; க்கு சமம் (a 24 ஆகிறது)
+a /= 4; // a = a / 4; க்கு சமம் (a 6 ஆகிறது)
+a %= 5; // a = a % 5; க்கு சமம் (a 1 ஆகிறது)
+```
+
+### ஒப்பீடு ஆபரேட்டர்கள்
+
+ஒப்பீடு ஆபரேட்டர்கள் இரண்டு மதிப்புகள் அல்லது வெளிப்பாடுகளை ஒப்பிட்டு `boolean` முடிவை திரும்பப் பெற பயன்படுத்தப்படுகின்றன, இது `true` அல்லது `false`. இந்த ஆபரேட்டர்கள் பொதுவாக நிபந்தனை அறிக்கைகளில் முடிவு எடுக்க அல்லது நிபந்தனைகளை மதிப்பீடு செய்ய பயன்படுத்தப்படுகின்றன.
+
+#### சமம் (`==`)
+
+இந்த ஆபரேட்டர் இடது மற்றும் வலது பக்கங்களில் உள்ள மதிப்புகள் சமனாக இருக்கின்றனவா என சரிபார்க்கிறது. அவை சமனாக இருந்தால், `true` திரும்பப் பெறுகிறது இல்லையெனில், false திரும்பப் பெறுகிறது. தரவு வகைகளை கவனிக்காது.
+
+```javascript
+5 == 5; // true
+"5" == 5; // true (implicit type conversion)
+```
+
+#### சமமில்லை (`!=`)
+
+இந்த ஆபரேட்டர் இடது மற்றும் வலது பக்கங்களில் உள்ள மதிப்புகள் சமனாக இல்லையா என சரிபார்க்கிறது. அவை சமனாக இல்லை என்றால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+5 != 3; // true
+"5" != 5; // false (implicit type conversion)
+```
+
+#### கடுமையான சமம் (`===`)
+
+இந்த ஆபரேட்டர் இடது மற்றும் வலது பக்கங்களில் உள்ள மதிப்புகள் சமனாக இருக்கின்றனவா மற்றும் ஒரே தரவு வகை கொண்டவையா என சரிபார்க்கிறது. மதிப்பு மற்றும் தரவு வகை இரண்டும் பொருந்தினால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+5 === 5; // true
+"5" === 5; // false (வெவ்வேறு தரவு வகைகள்)
+```
+
+#### கடுமையான சமமில்லை (`!==`)
+
+இந்த ஆபரேட்டர் இடது மற்றும் வலது பக்கங்களில் உள்ள மதிப்புகள் சமனாக இல்லையா அல்லது வெவ்வேறு தரவு வகைகள் கொண்டவையா என சரிபார்க்கிறது. அவை சமனாக இல்லை அல்லது வெவ்வேறு தரவு வகைகள் கொண்டவை என்றால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+5 !== "5"; // true (வெவ்வேறு தரவு வகைகள்)
+5 !== 5; // false
+```
+
+#### பெரியது (`>`)
+
+இந்த ஆபரேட்டர் இடது பக்கத்தில் உள்ள மதிப்பு வலது பக்கத்தில் உள்ள மதிப்பை விட பெரியதா என சரிபார்க்கிறது. இடது மதிப்பு பெரியதாக இருந்தால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+8 > 5; // true
+3 > 10; // false
+```
+
+#### சிறியது (`<`)
+
+இந்த ஆபரேட்டர் இடது பக்கத்தில் உள்ள மதிப்பு வலது பக்கத்தில் உள்ள மதிப்பை விட சிறியதா என சரிபார்க்கிறது. இடது மதிப்பு சிறியதாக இருந்தால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+3 < 5; // true
+8 < 2; // false
+```
+
+#### பெரியதாக அல்லது சமம் (`>=`)
+
+இந்த ஆபரேட்டர் இடது பக்கத்தில் உள்ள மதிப்பு வலது பக்கத்தில் உள்ள மதிப்பை விட பெரியதாக அல்லது சமனாக இருக்கிறதா என சரிபார்க்கிறது. இடது மதிப்பு பெரியதாக அல்லது சமனாக இருந்தால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+8 >= 5; // true
+3 >= 8; // false
+```
+
+#### சிறியதாக அல்லது சமம் (`<=`)
+
+இந்த ஆபரேட்டர் இடது பக்கத்தில் உள்ள மதிப்பு வலது பக்கத்தில் உள்ள மதிப்பை விட சிறியதாக அல்லது சமனாக இருக்கிறதா என சரிபார்க்கிறது. இடது மதிப்பு சிறியதாக அல்லது சமனாக இருந்தால், `true` திரும்பப் பெறுகிறது இல்லையெனில், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+3 <= 5; // true
+8 <= 2; // false
+```
+
+### தர்க்க ஆபரேட்டர்கள்
+
+தர்க்க ஆபரேட்டர்கள் Boolean மதிப்புகள் அல்லது வெளிப்பாடுகளில் தர்க்க செயல்பாடுகளை செய்ய பயன்படுத்தப்படுகின்றன. இந்த ஆபரேட்டர்கள் முடிவெடுக்க அல்லது சிக்கலான நிபந்தனைகளை மதிப்பீடு செய்ய Boolean மதிப்புகளை இணைக்க அல்லது கையாள அனுமதிக்கின்றன.
+
+#### தர்க்க AND (`&&`)
+
+தர்க்க AND ஆபரேட்டர் இரண்டு operands உம் `true` என்றால் `true` திரும்பப் பெறுகிறது. operands இல் குறைந்தது ஒன்று `false` என்றால், `false` திரும்பப் பெறுகிறது.
+
+```javascript
+true && true; // true
+true && false; // false
+false && true; // false
+false && false; // false
+```
+
+#### தர்க்க OR (`||`)
+
+தர்க்க OR ஆபரேட்டர் operands இல் குறைந்தது ஒன்று `true` என்றால் `true` திரும்பப் பெறுகிறது. இரண்டு operands உம் `false` என்றால் மட்டுமே `false` திரும்பப் பெறுகிறது.
+
+```javascript
+true || true; // true
+true || false; // true
+false || true; // true
+false || false; // false
+```
+
+#### தர்க்க NOT (`!`)
+
+தர்க்க NOT ஆபரேட்டர் ஒரு operand இன் மதிப்பை மறுக்கிறது. operand `false` என்றால் `true` திரும்பப் பெறுகிறது, operand `true` என்றால் `false` திரும்பப் பெறுகிறது.
+
+```javascript
+!true; // false
+!false; // true
+```
+
+### Ternary ஆபரேட்டர்கள்
+
+Ternary ஆபரேட்டர் மூன்று operands கொண்டது. இது if/else இன் எளிமைப்படுத்தப்பட்ட ஆபரேட்டர்.
+
+இது `if-else` நிபந்தனையின் குறுகிய வடிவம்.
+
+**தொடரியல்**
+
+```js
+Y = ? A : B
+நிபந்தனை உண்மை என்றால் Y = A இல்லையெனில் Y = B
+```
+
+```javascript
+let isEven = 8 % 2 === 0 ? "Even" : "Odd";
+console.log(isEven); // "Even"
+```
+
+### Bitwise ஆபரேட்டர்கள்
+
+Bitwise ஆபரேட்டர்கள் இரண்டு எண்களின் தனிப்பட்ட bits ஐ கையாள பயன்படுத்தப்படுகின்றன. அவை bit மட்டத்தில் செயல்பாடுகளை செய்கின்றன, இது குறைந்த-நிலை தரவை கட்டுப்படுத்த அல்லது பகுப்பாய்வு செய்ய வேண்டிய சூழல்களில் மிகவும் பயனுள்ளது.
+
+#### Bitwise AND (`&`)
+
+இந்த ஆபரேட்டர் இரண்டு எண்களின் ஒவ்வொரு bit ஐயும் ஒப்பிட்டு இரண்டு எண்களிலும் 1 ஆக உள்ள ஒவ்வொரு bit க்கும் 1 திரும்பப் பெறுகிறது. மற்ற அனைத்து bits உம் 0 ஆக அமைக்கப்படுகின்றன.
+
+```javascript
+1010 & 1100; // 1000
+```
+
+#### Bitwise OR (`|`)
+
+இந்த ஆபரேட்டர் இரண்டு எண்களின் ஒவ்வொரு bit ஐயும் ஒப்பிட்டு குறைந்தது ஒரு எண்ணில் 1 ஆக உள்ள ஒவ்வொரு bit க்கும் 1 திரும்பப் பெறுகிறது.
+
+```javascript
+1010 | 1100; // 1110
+```
+
+#### Bitwise XOR (`^`)
+
+இந்த ஆபரேட்டர் இரண்டு எண்களின் ஒவ்வொரு bit ஐயும் ஒப்பிட்டு ஒரு எண்ணில் 1 ஆக இருந்து இரண்டிலும் அல்ல என்ற ஒவ்வொரு bit க்கும் 1 திரும்பப் பெறுகிறது.
+
+```javascript
+1010 ^ 1100; // 0110
+```
+
+#### Bitwise NOT (`-`)
+
+இந்த ஆபரேட்டர் ஒரு எண்ணின் அனைத்து bits ஐயும் தலைகீழாக்குகிறது (flip செய்கிறது). ஒவ்வொரு 0 ஐயும் 1 ஆக மற்றும் ஒவ்வொரு 1 ஐயும் 0 ஆக மாற்றுகிறது.
+
+```javascript
+~1010; // 0101
+```
+
+#### இடது Shift (`<<`)
+
+இந்த ஆபரேட்டர் ஒரு எண்ணின் bits ஐ குறிப்பிட்ட எண்ணிக்கையிலான நிலைகளால் இடதுபுறம் நகர்த்துகிறது, நகர்த்தப்பட்ட நிலைகளை 0 ஆல் நிரப்புகிறது.
+
+```javascript
+1010 << 2; // 101000 (2 நிலைகளால் இடதுபுறம் நகர்த்தப்பட்டது)
+```
+
+#### வலது Shift (`>>`)
+
+இந்த ஆபரேட்டர் ஒரு எண்ணின் bits ஐ குறிப்பிட்ட எண்ணிக்கையிலான நிலைகளால் வலதுபுறம் நகர்த்துகிறது. நகர்த்தப்பட்ட நிலைகள் மிகவும் இடது bit (sign bit) அடிப்படையில் நிரப்பப்படுகின்றன.
+
+```javascript
+1010 >> 2; // 0010 (2 நிலைகளால் வலதுபுறம் நகர்த்தப்பட்டது)
+```
+
+### `typeof` ஆபரேட்டர்கள்
+
+இது operand வகையை திரும்பப் பெறுகிறது, JavaScript இல் இருக்கக்கூடிய வகைகள் undefined, Object, boolean, number, string, symbol, மற்றும் function.
+
+```javascript
+let value1 = 42;
+let value2 = "Hello, World!";
+let value3 = true;
+let value4 = null;
+
+console.log(typeof value1); // "number"
+console.log(typeof value2); // "string"
+console.log(typeof value3); // "boolean"
+console.log(typeof value4); // "object" (குறிப்பு: `typeof null` வரலாற்று காரணங்களால் "object" திரும்பப் பெறுகிறது)
+```
diff --git a/ta/objects/README.md b/ta/objects/README.md
new file mode 100644
index 00000000..bac2b524
--- /dev/null
+++ b/ta/objects/README.md
@@ -0,0 +1,42 @@
+---
+layout: editorial
+chapter: 9
+pageNumber: 71
+description: Object (பொருள்) என்பது ஒரு கூட்டு தரவு வகையாகும் (composite data type), இது பல மதிப்புகளை (பண்புகளை) key-value ஜோடிகளாக சேமிக்கவும் ஒழுங்கமைக்கவும் உங்களை அனுமதிக்கிறது. இது மொழியில் ஒரு அடிப்படை தரவு கட்டமைப்பாகும் மற்றும் சிக்கலான தரவைப் பிரதிநிதித்துவப்படுத்தவும் கட்டமைக்கப்பட்ட நிறுவனங்களை உருவாக்கவும் பரவலாகப் பயன்படுத்தப்படுகிறது.
+---
+
+# அத்தியாயம் 9
+# பொருள்கள் (Objects)
+
+ஜாவாஸ்கிரிப்டில், பொருள்கள் **மாற்றக்கூடியவை (mutable)**, ஏனெனில் குறிப்பு பொருள் (reference object) சுட்டிக்காட்டும் மதிப்புகளை நாம் மாற்றுகிறோம், மாறாக, ஒரு primitive மதிப்பை நாம் மாற்றும்போது அதன் குறிப்பையே மாற்றுகிறோம், அது இப்போது புதிய மதிப்பைச் சுட்டிக்காட்டுகிறது, எனவே primitive கள் **மாற்ற முடியாதவை (immutable)**. ஜாவாஸ்கிரிப்டின் primitive வகைகள் `true`, `false`, `numbers`, `strings`, `null` மற்றும் `undefined` ஆகும். மற்ற ஒவ்வொரு மதிப்பும் ஒரு `object` ஆகும். பொருள்களில் `propertyName`: `propertyValue` ஜோடிகள் உள்ளன. ஜாவாஸ்கிரிப்டில் ஒரு `object` ஐ உருவாக்க மூன்று வழிகள் உள்ளன:
+
+1. **literal**
+
+ ```javascript
+ let object = {};
+ // ஆம், வெறுமனே ஒரு ஜோடி சுருள் அடைப்புக்குறிகள்!
+ ```
+
+ > _**குறிப்பு:**_ இதுவே **பரிந்துரைக்கப்படும்** வழியாகும்.
+2. **பொருள் சார்ந்த (object-oriented)**
+
+ ```javascript
+ let object = new Object();
+ ```
+
+ > _**குறிப்பு:**_ இது கிட்டத்தட்ட Java போன்றது.
+3. **`object.create` ஐப் பயன்படுத்துதல்**
+
+ ```javascript
+ let object = Object.create(proto[, propertiesObject]);
+ ```
+
+ > _**குறிப்பு:**_ இது குறிப்பிட்ட prototype பொருள் மற்றும் பண்புகளுடன் ஒரு புதிய பொருளை உருவாக்குகிறது.
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளை ஆராய்வோம்:
+* [Delete](./delete.md)
+* [Enumeration](./enumeration.md)
+* [Mutable](./mutable.md)
+* [Properties](./properties.md)
+* [Prototype](./prototype.md)
+* [Reference](./reference.md)
diff --git a/ta/objects/constructor-functions.md b/ta/objects/constructor-functions.md
new file mode 100644
index 00000000..e3b1dd0b
--- /dev/null
+++ b/ta/objects/constructor-functions.md
@@ -0,0 +1,95 @@
+---
+chapter: 9
+description: ஜாவாஸ்கிரிப்டில் Constructor செயல்பாடுகளைப் புரிந்துகொள்வது.
+---
+
+## ஜாவாஸ்கிரிப்டில் Constructor செயல்பாடுகளைப் புரிந்துகொள்வது
+
+ஜாவாஸ்கிரிப்டில் உள்ள Constructor செயல்பாடுகள் (Constructor functions) பொருள்களை உருவாக்கவும் தொடங்கவும் பயன்படுத்தப்படும் சிறப்பு செயல்பாடுகளாகும். ஒத்த பண்புகள் மற்றும் முறைகளைக் கொண்ட பல பொருள்களை உருவாக்குவதற்கான வரைபடத்தை வரையறுப்பதற்கான வழியை அவை வழங்குகின்றன.
+
+### ஒரு Constructor செயல்பாட்டை வரையறுத்தல்
+
+ஒரு constructor செயல்பாடு ஒரு வழக்கமான செயல்பாட்டைப் போலவே வரையறுக்கப்படுகிறது, ஆனால் இது வழக்கமான செயல்பாடுகளிலிருந்து வேறுபடுத்துவதற்கு பொதுவாக ஆரம்ப பெரிய எழுத்துடன் (capital letter) பெயரிடப்படுகிறது.
+
+### Constructor செயல்பாட்டிற்கான எடுத்துக்காட்டு
+
+ஒரு constructor செயல்பாட்டின் அடிப்படை எடுத்துக்காட்டு இங்கே:
+
+```javascript
+function Person(firstName, lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+}
+
+const person1 = new Person("John", "Doe");
+const person2 = new Person("Jane", "Smith");
+
+console.log(person1.firstName); // Output: John
+console.log(person2.lastName); // Output: Smith
+```
+
+இந்த எடுத்துக்காட்டில், `Person` constructor செயல்பாடு புதிதாக உருவாக்கப்பட்ட ஒவ்வொரு பொருளுக்கும் `firstName` மற்றும் `lastName` பண்புகளைத் தொடங்குவதற்குப் பயன்படுகிறது.
+
+### Constructor செயல்பாடுகளில் முறைகளைச் சேர்த்தல் (Adding Methods)
+
+Constructor இன் prototype இல் முறைகளை வரையறுப்பதன் மூலம் ஒரு constructor செயல்பாட்டால் உருவாக்கப்பட்ட பொருள்களில் நீங்கள் முறைகளைச் சேர்க்கலாம்.
+
+```javascript
+function Person(firstName, lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+}
+
+Person.prototype.getFullName = function() {
+ return `${this.firstName} ${this.lastName}`;
+};
+
+const person1 = new Person("John", "Doe");
+console.log(person1.getFullName()); // Output: John Doe
+```
+
+### `new` முக்கிய சொல்லைப் பயன்படுத்துதல்
+
+ஒரு constructor செயல்பாட்டிலிருந்து ஒரு பொருளின் instance ஐ உருவாக்க `new` முக்கிய சொல் பயன்படுத்தப்படுகிறது. இது பின்வரும் படிகளைச் செய்கிறது:
+1. ஒரு புதிய வெற்று பொருளை உருவாக்குகிறது.
+2. `this` முக்கிய சொல்லை புதிய பொருளுக்கு அமைக்கிறது.
+3. Constructor செயல்பாட்டை இயக்குகிறது.
+4. புதிய பொருளைத் திரும்பப் பெறுகிறது.
+
+### `new` முக்கிய சொல்லுடன் எடுத்துக்காட்டு
+
+```javascript
+function Car(make, model) {
+ this.make = make;
+ this.model = model;
+}
+
+const car1 = new Car("Toyota", "Corolla");
+console.log(car1.make); // Output: Toyota
+```
+
+### Constructor செயல்பாடுகள் (vs) Classes
+
+ES6 `class` தொடரியலை அறிமுகப்படுத்தியது, இது constructor செயல்பாடுகள் மற்றும் முறைகளை வரையறுக்க மிகவும் சுருக்கமான மற்றும் படிக்கக்கூடிய வழியை வழங்குகிறது.
+
+### Classes உடன் எடுத்துக்காட்டு
+
+```javascript
+class Person {
+ constructor(firstName, lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ getFullName() {
+ return `${this.firstName} ${this.lastName}`;
+ }
+}
+
+const person1 = new Person("John", "Doe");
+console.log(person1.getFullName()); // Output: John Doe
+```
+
+### முடிவுரை
+
+Constructor செயல்பாடுகள் பொருள்களை உருவாக்கவும் தொடங்கவும் ஜாவாஸ்கிரிப்டில் ஒரு அடிப்படை அம்சமாகும். அவை பொருள்களுக்கான வரைபடத்தை வரையறுக்கவும் அவற்றின் prototype இல் முறைகளைச் சேர்க்கவும் உங்களை அனுமதிக்கின்றன. ES6 இன் அறிமுகத்துடன், `class` தொடரியல் அதே செயல்பாட்டை அடைவதற்கு மிகவும் நவீன மற்றும் படிக்கக்கூடிய வழியை வழங்குகிறது.
diff --git a/ta/objects/constructor-property.md b/ta/objects/constructor-property.md
new file mode 100644
index 00000000..86a0360b
--- /dev/null
+++ b/ta/objects/constructor-property.md
@@ -0,0 +1,67 @@
+---
+chapter: 9
+description: ஜாவாஸ்கிரிப்டில் `constructor` பண்பைப் புரிந்துகொள்வது.
+---
+
+## ஜாவாஸ்கிரிப்டில் `constructor` பண்பைப் புரிந்துகொள்வது
+
+ஜாவாஸ்கிரிப்டில் உள்ள `constructor` பண்பு (property) என்பது ஒரு instance இன் prototype ஐ உருவாக்கிய செயல்பாட்டிற்கான ஒரு குறிப்பைக் காட்டுகிறது. பொருளை உருவாக்கப் பயன்படுத்தப்பட்ட செயல்பாட்டைச் சுட்டிக்காட்டும் அனைத்து பொருள்களின் பண்பும் இதுவாகும்.
+
+### `constructor` பண்பு என்றால் என்ன?
+
+`constructor` பண்பு instance ஐ உருவாக்கிய constructor செயல்பாட்டிற்கான குறிப்பைத் திரும்பப் பெறுகிறது. ஒரு பொருளின் வகையை அடையாளம் காண இது பயனுள்ளதாக இருக்கும்.
+
+### `constructor` பண்பிற்கான எடுத்துக்காட்டு
+
+`constructor` பண்பை விளக்குவதற்கான அடிப்படை எடுத்துக்காட்டு இங்கே:
+
+```javascript
+function Person(firstName, lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+}
+
+const person1 = new Person("John", "Doe");
+console.log(person1.constructor); // Output: [Function: Person]
+```
+
+இந்த எடுத்துக்காட்டில், `person1` இன் `constructor` பண்பு `Person` செயல்பாட்டை சுட்டிக்காட்டுகிறது.
+
+### புதிய Instances ஐ உருவாக்க `constructor` பண்பைப் பயன்படுத்துதல்
+
+ஒரே வகையின் புதிய instances ஐ உருவாக்க நீங்கள் `constructor` பண்பைப் பயன்படுத்தலாம்:
+
+```javascript
+const person2 = new person1.constructor("Jane", "Smith");
+console.log(person2.firstName); // Output: Jane
+```
+
+### உள்ளமைக்கப்பட்ட பொருள்களில் (Built-in Objects) `constructor` பண்பு
+
+உள்ளமைக்கப்பட்ட ஜாவாஸ்கிரிப்ட் பொருள்களிலும் `constructor` பண்பு கிடைக்கிறது:
+
+```javascript
+const arr = [];
+console.log(arr.constructor); // Output: [Function: Array]
+
+const obj = {};
+console.log(obj.constructor); // Output: [Function: Object]
+```
+
+### `constructor` பண்பை மாற்றுதல்
+
+நீங்கள் `constructor` பண்பை மாற்றலாம், ஆனால் இது எதிர்பாராத நடத்தைக்கு வழிவகுக்கும் என்பதால் பொதுவாகப் பரிந்துரைக்கப்படுவதில்லை:
+
+```javascript
+function Animal(name) {
+ this.name = name;
+}
+
+const dog = new Animal("Rex");
+dog.constructor = Person;
+console.log(dog.constructor); // Output: [Function: Person]
+```
+
+### முடிவுரை
+
+`constructor` பண்பு ஜாவாஸ்கிரிப்டில் உள்ள ஒரு பயனுள்ள அம்சமாகும், இது ஒரு instance இன் prototype ஐ உருவாக்கிய செயல்பாட்டைக் குறிப்பிட உங்களை அனுமதிக்கிறது. ஒரு பொருளின் வகையை அடையாளம் காணவும், ஒரே வகையின் புதிய instances ஐ உருவாக்கவும் இதைப் பயன்படுத்தலாம். இருப்பினும், `constructor` பண்பை மாற்றுவது எச்சரிக்கையுடன் செய்யப்பட வேண்டும்.
\ No newline at end of file
diff --git a/ta/objects/delete.md b/ta/objects/delete.md
new file mode 100644
index 00000000..b8e85896
--- /dev/null
+++ b/ta/objects/delete.md
@@ -0,0 +1,36 @@
+---
+chapter: 9
+pageNumber: 77
+description: ஒரு பொருளில் இருந்து ஒரு **பண்பை அகற்ற (remove a property)** `delete` ஆபரேட்டரைப் பயன்படுத்தலாம். ஒரு பண்பு நீக்கப்படும்போது, அது பொருளிலிருந்து அகற்றப்படும், மேலும் அதை அணுகவோ கணக்கிடவோ முடியாது (அதாவது, இது for-in சுழற்சியில் காட்டப்படாது).
+---
+# Delete Operator
+
+ஒரு பொருளில் இருந்து ஒரு **பண்பை அகற்ற (remove a property)** `delete` ஆபரேட்டரைப் பயன்படுத்தலாம். ஒரு பண்பு நீக்கப்படும்போது, அது பொருளிலிருந்து அகற்றப்படும், மேலும் அதை அணுகவோ கணக்கிடவோ முடியாது (அதாவது, இது for-in சுழற்சியில் காட்டப்படாது).
+
+`delete` ஐப் பயன்படுத்துவதற்கான தொடரியல் இங்கே:
+
+```javascript
+delete object.property;
+```
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let adult = { age: 26 },
+ child = Object.create(adult);
+
+child.age = 8;
+
+delete child.age;
+
+/* child இலிருந்து age பண்பை அகற்றி, prototype இன் வயதை வெளிப்படுத்துகிறது, ஏனெனில் அப்போது அது மேலெழுதப்படாது (overridden). */
+
+let prototypeAge = child.age;
+// 26, ஏனெனில் child க்கு அதன் சொந்த age பண்பு இல்லை.
+```
+
+{% hint style="working" %}
+`delete` ஆபரேட்டர் ஒரு பொருளின் சொந்த பண்புகளில் மட்டுமே செயல்படும், மற்றும் மரபுவழிப் பண்புகளில் (inherited properties) அல்ல. `configurable` பண்புக்கூறு (attribute) `false` என அமைக்கப்பட்ட பண்புகளிலும் இது செயல்படாது.
+{% endhint %}
+
+`delete` ஆபரேட்டர் பொருளின் prototype chain ஐ மாற்றாது. இது குறிப்பிட்ட பண்பை பொருளிலிருந்து நீக்குகிறது, மேலும் இது பொருளை அல்லது அதன் பண்புகளை உண்மையில் அழிக்காது. இது வெறுமனே பண்புகளை அணுக முடியாததாக ஆக்குகிறது. நீங்கள் ஒரு பொருளை அழித்து அதன் நினைவகத்தை வெளியிட (release its memory) வேண்டும் என்றால், நீங்கள் பொருளை `null` என அமைக்கலாம் அல்லது நினைவகத்தை திரும்பப் பெற (reclaim) garbage collector ஐப் பயன்படுத்தலாம்.
diff --git a/ta/objects/dynamic-nature.md b/ta/objects/dynamic-nature.md
new file mode 100644
index 00000000..c2a2d8aa
--- /dev/null
+++ b/ta/objects/dynamic-nature.md
@@ -0,0 +1,114 @@
+---
+chapter: 9
+description: ஜாவாஸ்கிரிப்டில் பொருள்களின் டைனமிக் தன்மையைப் (Dynamic Nature) புரிந்துகொள்வது.
+---
+
+## ஜாவாஸ்கிரிப்டில் பொருள்களின் டைனமிக் தன்மையைப் (Dynamic Nature) புரிந்துகொள்வது
+
+ஜாவாஸ்கிரிப்ட் பொருள்கள் டைனமிக் ஆனவை, அதாவது அவற்றின் பண்புகளை (properties) இயங்கும் நேரத்தில் (runtime) சேர்க்கலாம், மாற்றலாம் அல்லது நீக்கலாம். இந்த நெகிழ்வுத்தன்மை சக்திவாய்ந்த மற்றும் தகவமைக்கக்கூடிய குறியீட்டை அனுமதிக்கிறது, ஆனால் எதிர்பாராத நடத்தையைத் தவிர்க்க கவனமாக மேலாண்மை தேவைப்படுகிறது.
+
+### பண்புகளைச் சேர்த்தல் (Adding Properties)
+
+Dot notation அல்லது bracket notation ஐப் பயன்படுத்தி எந்த நேரத்திலும் ஒரு பொருளுக்கு பண்புகளைச் சேர்க்கலாம்.
+
+```javascript
+const person = {
+ firstName: "John",
+ lastName: "Doe"
+};
+
+// ஒரு புதிய பண்பைச் சேர்த்தல்
+person.age = 30;
+console.log( person.age ); // Output: 30
+
+// bracket notation ஐப் பயன்படுத்தி ஒரு பண்பைச் சேர்த்தல்
+person["gender"] = "male";
+console.log( person.gender ); // Output: male
+```
+
+### பண்புகளை மாற்றுதல் (Modifying Properties)
+
+ஏற்கனவே உள்ள பண்புகளின் மதிப்புகளை மீண்டும் ஒதுக்குவதன் (reassigning) மூலம் மாற்றலாம்.
+
+```javascript
+const car = {
+ make: "Toyota",
+ model: "Corolla"
+};
+
+// ஒரு பண்பை மாற்றுதல்
+car.model = "Camry";
+console.log( car.model ); // Output: Camry
+```
+
+### பண்புகளை நீக்குதல் (Deleting Properties)
+
+`delete` ஆபரேட்டரைப் பயன்படுத்தி ஒரு பொருளிலிருந்து பண்புகளை அகற்றலாம்.
+
+```javascript
+const book = {
+ title: "1984",
+ author: "George Orwell",
+ year: 1949
+};
+
+// ஒரு பண்பை நீக்குதல்
+delete book.year;
+console.log( book.year ); // Output: undefined
+```
+
+### பண்புகளைச் சரிபார்த்தல் (Checking for Properties)
+
+`in` ஆபரேட்டர் அல்லது `hasOwnProperty` முறையைப் பயன்படுத்தி ஒரு பொருளுக்கு ஒரு குறிப்பிட்ட பண்பு உள்ளதா என்பதை நீங்கள் சரிபார்க்கலாம்.
+
+```javascript
+const user = {
+ username: "johndoe",
+ email: "john@example.com"
+};
+
+// `in` ஆபரேட்டரைப் பயன்படுத்துதல்
+console.log( "email" in user ); // Output: true
+
+// `hasOwnProperty` முறையைப் பயன்படுத்துதல்
+console.log( user.hasOwnProperty( "username" ) ); // Output: true
+```
+
+### பண்புகளை மீள்திருப்புதல் (Iterating Over Properties)
+
+`for...in` சுழற்சியைப் பயன்படுத்தி ஒரு பொருளின் பண்புகளை நீங்கள் மீள்திருப்பலாம்.
+
+```javascript
+const student = {
+ name: "Alice",
+ age: 22,
+ major: "Computer Science"
+};
+
+for (let key in student) {
+ if (student.hasOwnProperty( key )) {
+ console.log( `${key}: ${student[key]}` );
+ }
+}
+// Output:
+// name: Alice
+// age: 22
+// major: Computer Science
+```
+
+### டைனமிக் பண்புப் பெயர்கள் (Dynamic Property Names)
+
+Object literals இல் கணக்கிடப்பட்ட பண்புப் பெயர்களைப் (computed property names) பயன்படுத்துவதன் மூலம் நீங்கள் டைனமிக் பண்புப் பெயர்களைப் பயன்படுத்தலாம்.
+
+```javascript
+const propName = "score";
+const game = {
+ [propName]: 100
+};
+
+console.log( game.score ); // Output: 100
+```
+
+### முடிவுரை
+
+ஜாவாஸ்கிரிப்ட் பொருள்களின் டைனமிக் தன்மை தரவு கட்டமைப்புகளை நிர்வகிப்பதில் பெரும் நெகிழ்வுத்தன்மையை வழங்குகிறது. நீங்கள் இயங்கும் நேரத்தில் பண்புகளைச் சேர்க்கலாம், மாற்றலாம் மற்றும் நீக்கலாம், பண்புகளின் இருப்பைச் சரிபார்க்கலாம் மற்றும் அவற்றை மீள்திருப்பலாம். இந்த நெகிழ்வுத்தன்மை சக்திவாய்ந்ததாக இருந்தாலும், குறியீட்டு நிலைத்தன்மையையும் முன்கணிப்புத்தன்மையையும் பராமரிக்க கவனமாகக் கையாள வேண்டும்.
\ No newline at end of file
diff --git a/ta/objects/enumeration.md b/ta/objects/enumeration.md
new file mode 100644
index 00000000..40551811
--- /dev/null
+++ b/ta/objects/enumeration.md
@@ -0,0 +1,48 @@
+---
+chapter: 9
+pageNumber: 78
+description: Enumeration என்பது ஒரு பொருளின் பண்புகளை மீள்திருப்புதல் மற்றும் ஒவ்வொரு பண்புக்கும் ஒரு குறிப்பிட்ட செயலைச் செய்யும் செயல்முறையைக் குறிக்கிறது. ஒரு பொருளின் பண்புகளை கணக்கிடுவதற்கான ஒரு வழி `for-in` சுழற்சியைப் பயன்படுத்துவதாகும். `for-in` சுழற்சி ஒரு பொருளின் எண்ணக்கூடிய பண்புகளை தன்னிச்சையான வரிசையில் மீள்திருப்புகிறது, மேலும் ஒவ்வொரு பண்புக்கும் அது கொடுக்கப்பட்ட குறியீட்டுத் தொகுதியை இயக்குகிறது.
+---
+# கணக்கீடு (Enumeration)
+
+_Enumeration_ என்பது ஒரு பொருளின் பண்புகளை மீள்திருப்புதல் மற்றும் ஒவ்வொரு பண்புக்கும் ஒரு குறிப்பிட்ட செயலைச் செய்யும் செயல்முறையைக் குறிக்கிறது. ஜாவாஸ்கிரிப்டில் ஒரு பொருளின் பண்புகளை கணக்கிடுவதற்கு பல வழிகள் உள்ளன.
+
+ஒரு பொருளின் பண்புகளை கணக்கிடுவதற்கான ஒரு வழி `for-in` சுழற்சியைப் பயன்படுத்துவதாகும். `for-in` சுழற்சி ஒரு பொருளின் எண்ணக்கூடிய பண்புகளை தன்னிச்சையான வரிசையில் மீள்திருப்புகிறது, மேலும் ஒவ்வொரு பண்புக்கும் அது கொடுக்கப்பட்ட குறியீட்டுத் தொகுதியை இயக்குகிறது.
+
+`for in` அறிக்கை ஒரு பொருளில் உள்ள அனைத்து பண்பு பெயர்களிலும் சுழல முடியும். கணக்கீட்டில் செயல்பாடுகள் (functions) மற்றும் prototype பண்புகள் (prototype properties) அடங்கும்.
+
+```javascript
+let fruit = {
+ apple: 2,
+ orange: 5,
+ pear: 1,
+ },
+ sentence = "I have ",
+ quantity;
+for (kind in fruit) {
+ quantity = fruit[kind];
+ sentence += quantity + " " + kind + (quantity === 1 ? "" : "s") + ", ";
+}
+// பின்வரும் வரி பின்தங்கிய காற்புள்ளியை (trailing comma) நீக்குகிறது.
+sentence = sentence.substr(0, sentence.length - 2) + ".";
+// I have 2 apples, 5 oranges, 1 pear.
+```
+
+ஒரு பொருளின் பண்புகளை கணக்கிடுவதற்கான மற்றொரு வழி `Object.keys()` முறையைப் பயன்படுத்துவதாகும், இது பொருளின் சொந்த எண்ணக்கூடிய பண்புப் பெயர்களின் வரிசையைத் (array) திரும்பப் பெறுகிறது.
+
+எடுத்துக்காட்டாக:
+
+```typescript
+let object = {
+ foo: 'bar',
+ baz: 'qux'
+};
+
+let properties = Object.keys(object);
+properties.forEach(function(property) {
+ console.log(property + ': ' + object[property]);
+});
+
+// foo: bar
+// baz: qux
+```
diff --git a/ta/objects/factory-functions.md b/ta/objects/factory-functions.md
new file mode 100644
index 00000000..d625b705
--- /dev/null
+++ b/ta/objects/factory-functions.md
@@ -0,0 +1,106 @@
+---
+chapter: 9
+description: ஜாவாஸ்கிரிப்டில் பொருள்களுக்கான Factory செயல்பாடுகளைப் புரிந்துகொள்வது.
+---
+
+## ஜாவாஸ்கிரிப்டில் பொருள்களுக்கான Factory செயல்பாடுகளைப் புரிந்துகொள்வது
+
+Factory செயல்பாடுகள் (Factory functions) என்பவை பொருள்களை உருவாக்கித் திரும்பப் பெறும் செயல்பாடுகளாகும். `new` முக்கிய சொல் அல்லது constructor செயல்பாடுகளைப் பயன்படுத்தாமல் பல பொருள்களின் instances ஐ உருவாக்குவதற்கான நெகிழ்வான வழியை அவை வழங்குகின்றன.
+
+### ஒரு Factory செயல்பாட்டை வரையறுத்தல்
+
+ஒரு factory செயல்பாடு என்பது ஒரு பொருளைத் திரும்பப் பெறும் ஒரு வழக்கமான செயல்பாடாகும். உருவாக்கப்பட்ட பொருளின் பண்புகளைத் தனிப்பயனாக்க இது அளவுருக்களை (parameters) உள்ளடக்கலாம்.
+
+### ஒரு Factory செயல்பாட்டிற்கான எடுத்துக்காட்டு
+
+ஒரு factory செயல்பாட்டின் அடிப்படை எடுத்துக்காட்டு இங்கே:
+
+```javascript
+function createPerson(firstName, lastName) {
+ return {
+ firstName: firstName,
+ lastName: lastName,
+ getFullName: function() {
+ return `${this.firstName} ${this.lastName}`;
+ }
+ };
+}
+
+const person1 = createPerson("John", "Doe");
+const person2 = createPerson("Jane", "Smith");
+
+console.log(person1.getFullName()); // Output: John Doe
+console.log(person2.getFullName()); // Output: Jane Smith
+```
+
+இந்த எடுத்துக்காட்டில், `createPerson` செயல்பாடு `firstName`, `lastName` மற்றும் `getFullName` பண்புகளுடன் ஒரு புதிய பொருளைத் திரும்பப் பெறுகிறது.
+
+### Factory செயல்பாடுகளின் நன்மைகள்
+
+1. **`new` முக்கிய சொல் இல்லை**: Factory செயல்பாடுகளுக்கு `new` முக்கிய சொல் தேவையில்லை, இதனால் அவை எளிமையானவை மற்றும் பிழைகள் ஏற்படுவதற்கான வாய்ப்புகள் குறைவு.
+2. **உறைபொதியாக்கம் (Encapsulation)**: Factory செயல்பாடுகள் தனிப்பட்ட மாறிகள் (private variables) மற்றும் முறைகளை உறைபொதியாக்க முடியும்.
+3. **நெகிழ்வுத்தன்மை (Flexibility)**: அவை நிபந்தனைகளின் அடிப்படையில் பல்வேறு வகையான பொருள்களைத் திரும்பப் பெறலாம்.
+
+### Factory செயல்பாடுகளுடன் உறைபொதியாக்கம்
+
+Factory செயல்பாடுகள் செயல்பாடு நோக்கத்திற்குள் மாறிகளை வரையறுப்பதன் மூலமும், அந்த மாறிகளை அணுகும் முறைகளைக் கொண்ட ஒரு பொருளைத் திரும்பப் பெறுவதன் மூலமும் தனிப்பட்ட தரவை உறைபொதியாக்க முடியும்.
+
+```javascript
+function createCounter() {
+ let count = 0;
+ return {
+ increment: function() {
+ count++;
+ return count;
+ },
+ decrement: function() {
+ count--;
+ return count;
+ },
+ getCount: function() {
+ return count;
+ }
+ };
+}
+
+const counter = createCounter();
+console.log(counter.increment()); // Output: 1
+console.log(counter.getCount()); // Output: 1
+console.log(counter.decrement()); // Output: 0
+```
+
+### வெவ்வேறு பொருள்களைத் திரும்பப் பெறுதல்
+
+Factory செயல்பாடுகள் நிபந்தனைகளின் அடிப்படையில் வெவ்வேறு பொருள்களைத் திரும்பப் பெறலாம், இது பொருள் உருவாக்கத்தில் நெகிழ்வுத்தன்மையை வழங்குகிறது.
+
+```javascript
+function createShape(type) {
+ if (type === "circle") {
+ return {
+ type: "circle",
+ radius: 10,
+ getArea: function() {
+ return Math.PI * this.radius * this.radius;
+ }
+ };
+ } else if (type === "square") {
+ return {
+ type: "square",
+ side: 10,
+ getArea: function() {
+ return this.side * this.side;
+ }
+ };
+ }
+}
+
+const circle = createShape("circle");
+const square = createShape("square");
+
+console.log(circle.getArea()); // Output: 314.1592653589793
+console.log(square.getArea()); // Output: 100
+```
+
+### முடிவுரை
+
+Factory செயல்பாடுகள் ஜாவாஸ்கிரிப்டில் பொருள்களை உருவாக்க சக்திவாய்ந்த மற்றும் நெகிழ்வான வழியாகும். `new` முக்கிய சொல்லைத் தவிர்ப்பது, தனிப்பட்ட தரவை உறைபொதியாக்குவது மற்றும் நிபந்தனைகளின் அடிப்படையில் பல்வேறு வகையான பொருள்களைத் திரும்பப் பெறுவது போன்ற நன்மைகளை அவை வழங்குகின்றன. factory செயல்பாடுகளைப் பயன்படுத்துவதன் மூலம், நீங்கள் மிகவும் மட்டுப்படுத்தப்பட்ட (modular) மற்றும் பராமரிக்கக்கூடிய குறியீட்டை எழுதலாம்.
diff --git a/ta/objects/mutable.md b/ta/objects/mutable.md
new file mode 100644
index 00000000..86389177
--- /dev/null
+++ b/ta/objects/mutable.md
@@ -0,0 +1,33 @@
+---
+chapter: 9
+pageNumber: 73
+description: Mutable (மாற்றக்கூடியது) என்றால் ஒரு பொருள் அல்லது தரவு வகையை உருவாக்கிய பிறகு மாற்றலாம், அதே சமயம் "immutable" (மாற்ற முடியாதது) என்றால் அதை மாற்ற முடியாது. Mutable பொருள்கள் அவற்றின் உள் நிலையை மாற்ற அனுமதிக்கின்றன, அதே சமயம் immutable பொருள்கள் மாற்றங்களுடன் புதிய instances ஐத் திரும்பப் பெறுகின்றன, அசலை மாற்றாமல் விடுகின்றன.
+---
+# Mutable (மாற்றக்கூடியது)
+
+பொருள்களுக்கும் (objects) primitive மதிப்புகளுக்கும் உள்ள வித்தியாசம் என்னவென்றால், நாம் **பொருள்களை மாற்றலாம்**, அதே சமயம் primitive மதிப்புகள் **மாற்ற முடியாதவை (immutable)**.
+
+எடுத்துக்காட்டாக:
+
+```javascript
+let myPrimitive = "முதல் மதிப்பு";
+myPrimitive = "மற்றொரு மதிப்பு";
+// myPrimitive இப்போது மற்றொரு சரத்தை சுட்டிக்காட்டுகிறது.
+let myObject = { key: "முதல் மதிப்பு" };
+myObject.key = "மற்றொரு மதிப்பு";
+// myObject அதே பொருளை சுட்டிக்காட்டுகிறது.
+```
+
+Dot notation அல்லது square bracket notation ஐப் பயன்படுத்தி ஒரு பொருளின் பண்புகளை நீங்கள் **சேர்க்கலாம்**, **மாற்றலாம்** அல்லது **நீக்கலாம்**.
+
+```javascript
+let object = {};
+object.foo = 'bar'; // 'foo' பண்பைச் சேர்
+object['baz'] = 'qux'; // 'baz' பண்பைச் சேர்
+object.foo = 'quux'; // 'foo' பண்பை மாற்று
+delete object.baz; // 'baz' பண்பை நீக்கு
+```
+
+{% hint style="working" %}
+Primitive மதிப்புகள் (எண்கள் மற்றும் சரங்கள் போன்றவை) மாற்ற முடியாதவை, அதே சமயம் பொருள்கள் (வரிசைகள் மற்றும் பொருள்கள் போன்றவை) மாற்றக்கூடியவை.
+{% endhint %}
diff --git a/ta/objects/properties.md b/ta/objects/properties.md
new file mode 100644
index 00000000..de426e2e
--- /dev/null
+++ b/ta/objects/properties.md
@@ -0,0 +1,45 @@
+---
+chapter: 9
+pageNumber: 72
+description: Object என்பது ஒரு கூட்டு தரவு வகையாகும், இது key-value ஜோடிகளில் தரவைச் சேமிக்கவும் ஒழுங்கமைக்கவும் உங்களை அனுமதிக்கிறது. ஒரு பொருளில் உள்ள ஒவ்வொரு key-value ஜோடியும் ஒரு property (பண்பு) என்று குறிப்பிடப்படுகிறது. பொருளின் குணாதிசயங்கள், கூறுகள் அல்லது அம்சங்களைக் குறிக்க பண்புகள் பயன்படுத்தப்படுகின்றன.
+---
+# Properties
+
+பொருளின் பண்பு (property) என்பது ஒரு `propertyName`: `propertyValue` ஜோடியாகும், இதில் **property name என்பது ஒரு சரமாக (string) மட்டுமே இருக்க முடியும்**. அது ஒரு சரமாக இல்லாவிட்டால், அது சரமாக மாற்றப்படும். நீங்கள் ஒரு பொருளை **உருவாக்கும்போது** அல்லது **பின்னர்** பண்புகளைக் குறிப்பிடலாம். காற்புள்ளிகளால் (commas) பிரிக்கப்பட்ட பூஜ்ஜியம் அல்லது அதற்கு மேற்பட்ட பண்புகள் இருக்கலாம்.
+
+```javascript
+let language = {
+ name: "JavaScript",
+ isSupportedByBrowsers: true,
+ createdIn: 1995,
+ author: {
+ firstName: "Brendan",
+ lastName: "Eich",
+ },
+ // ஆம், பொருள்களை உள்ளமைக்க (nested) முடியும்!
+ getAuthorFullName: function () {
+ return this.author.firstName + " " + this.author.lastName;
+ },
+ // ஆம், செயல்பாடுகளும் (functions) மதிப்புகளாக இருக்கலாம்!
+};
+```
+
+ஒரு பண்பின் மதிப்பை எவ்வாறு **பெறுவது (get)** என்பதைப் பின்வரும் குறியீடு விளக்குகிறது.
+
+```javascript
+let variable = language.name;
+// variable இப்போது "JavaScript" சரத்தைக் கொண்டுள்ளது.
+variable = language["name"];
+// மேலே உள்ள வரிகள் ஒரே காரியத்தையே செய்கின்றன. வித்தியாசம் என்னவென்றால், இரண்டாவது வரியானது எந்தவொரு சரத்தையும் பண்புப் பெயராகப் பயன்படுத்த உங்களை அனுமதிக்கிறது, ஆனால் இது படிப்பதற்கு எளிதானதாக இல்லை.
+variable = language.newProperty;
+// variable இப்போது undefined ஆக உள்ளது, ஏனென்றால் இந்த பண்பை நாங்கள் இன்னும் ஒதுக்கவில்லை.
+```
+
+புதிய பண்பை எவ்வாறு **சேர்ப்பது (add)** அல்லது ஏற்கனவே உள்ள ஒன்றை எவ்வாறு **மாற்றுவது (change)** என்பதைப் பின்வரும் எடுத்துக்காட்டு காட்டுகிறது.
+
+```javascript
+language.newProperty = "new value";
+// இப்போது பொருளுக்கு புதிய பண்பு உள்ளது. பண்பு ஏற்கனவே இருந்தால், அதன் மதிப்பு மாற்றப்படும்.
+language["newProperty"] = "changed value";
+// மீண்டும் ஒருமுறை, நீங்கள் இரண்டு வழிகளிலும் பண்புகளை அணுகலாம். முதலாவது (dot notation) பரிந்துரைக்கப்படுகிறது.
+```
diff --git a/ta/objects/prototype.md b/ta/objects/prototype.md
new file mode 100644
index 00000000..93d8ec85
--- /dev/null
+++ b/ta/objects/prototype.md
@@ -0,0 +1,56 @@
+---
+chapter: 9
+pageNumber: 76
+description: ஒவ்வொரு பொருளுக்கும் prototype என்று அழைக்கப்படும் ஒரு சிறப்பு பண்பு உள்ளது, இது மற்றொரு பொருளுக்கான குறிப்பு ஆகும். ஜாவாஸ்கிரிப்டில் உள்ள prototype-அடிப்படையிலான மரபுரிமை (inheritance) அமைப்பின் ஒரு முக்கிய பகுதி prototype பண்பு ஆகும், மேலும் இது மற்ற பொருள்களிலிருந்து பண்புகள் மற்றும் முறைகளைப் பெற பொருள்களை அனுமதிக்கிறது.
+---
+# Prototype
+
+ஒவ்வொரு பொருளும் ஒரு prototype பொருளுடன் இணைக்கப்பட்டுள்ளது, அதிலிருந்து பண்புகளைப் பெறுகிறது. Object literals (`{}`) இலிருந்து உருவாக்கப்பட்ட பொருள்கள் தானாகவே `Object.prototype` உடன் இணைக்கப்படுகின்றன, இது ஜாவாஸ்கிரிப்டுடன் தரநிலையாக வரும் ஒரு பொருளாகும்.
+
+பின்வரும் குறியீட்டில் உள்ளதைப் போல, நீங்கள் மீட்டெடுக்க விரும்பும் ஒரு பண்பைக் கண்டறிய ஜாவாஸ்கிரிப்ட் மொழிபெயர்ப்பாளர் (உங்கள் உலாவியில் உள்ள ஒரு தொகுதி) முயற்சிக்கும்போது:
+
+```javascript
+let adult = { age: 26 },
+ retrievedProperty = adult.age;
+// மேலே உள்ள வரி
+```
+
+முதலில், மொழிபெயர்ப்பாளர் பொருள் கொண்ட ஒவ்வொரு பண்பையும் பார்க்கிறார். எடுத்துக்காட்டாக, `adult` க்கு ஒரே ஒரு சொந்த பண்பு மட்டுமே உள்ளது—`age`. இருப்பினும், இது `Object.prototype` இலிருந்து பெறப்பட்ட பல பண்புகளையும் கொண்டுள்ளது.
+
+```javascript
+let stringRepresentation = adult.toString();
+// மாறியில் '[object Object]' என்ற மதிப்பு உள்ளது
+```
+
+`toString` என்பது `Object.prototype` இன் பண்பாகும், இது பெறப்பட்டது. இது ஒரு செயல்பாட்டின் மதிப்பைக் கொண்டுள்ளது, இது பொருளின் சரம் பிரதிநிதித்துவத்தைத் திரும்பப் பெறுகிறது. இது மிகவும் அர்த்தமுள்ள பிரதிநிதித்துவத்தைத் திரும்பப் பெற விரும்பினால், நீங்கள் அதை மேலெழுதலாம் (override). adult பொருளுக்கு ஒரு புதிய பண்பைச் சேர்க்கவும்.
+
+```javascript
+adult.toString = function () {
+ return "நான் " + this.age;
+};
+```
+
+இப்போது நீங்கள் `toString` செயல்பாட்டை அழைத்தால், மொழிபெயர்ப்பாளர் பொருளில் புதிய பண்பைக் கண்டுபிடித்து நிறுத்திவிடுவார்.
+
+எனவே மொழிபெயர்ப்பாளர் பொருளிலிருந்து மேலும் அதன் prototype மூலமாகவும் வழியில் கண்டுபிடிக்கும் முதல் பண்பை மீட்டெடுக்கிறார்.
+
+இயல்புநிலை `Object.prototype` க்குப் பதிலாக உங்கள் சொந்த பொருளை ஒரு prototype ஆக அமைக்க, நீங்கள் பின்வருமாறு `Object.create` ஐ அழைக்கலாம்:
+
+```javascript
+let child = Object.create(adult);
+
+/* இந்த முறையில் பொருள்களை உருவாக்குவது, நாம் விரும்பும் இயல்புநிலை Object.prototype ஐ எளிதாக மாற்ற அனுமதிக்கிறது. இந்த வழக்கில், child இன் prototype adult பொருளாகும். */
+
+child.age = 8;
+
+/* முன்னதாக, child க்கு அதன் சொந்த age பண்பு இல்லை, மேலும் அதை கண்டுபிடிக்க மொழிபெயர்ப்பாளர் child இன் prototype க்கு மேலும் பார்க்க வேண்டியிருந்தது.
+ இப்போது, child இன் சொந்த வயதை அமைக்கும்போது, மொழிபெயர்ப்பாளர் மேலும் செல்ல மாட்டார்.
+ குறிப்பு: adult இன் வயது இன்னும் 26 ஆக உள்ளது. */
+
+let stringRepresentation = child.toString();
+
+// மதிப்பு "நான் 8".
+/* குறிப்பு: child இன் toString பண்பை நாங்கள் மேலெழுதவில்லை, இதனால் adult இன் முறை அழைக்கப்படும். adult க்கு toString பண்பு இல்லை என்றால், Object.prototype இன் toString முறை அழைக்கப்படும், மேலும் "நான் 8" என்பதற்குப் பதிலாக "[object Object]" கிடைக்கும் */
+```
+
+`child` இன் prototype `adult` ஆகும், அதன் prototype `Object.prototype` ஆகும். prototype களின் இந்த வரிசை **prototype chain** என்று அழைக்கப்படுகிறது.
diff --git a/ta/objects/reference.md b/ta/objects/reference.md
new file mode 100644
index 00000000..d71e415b
--- /dev/null
+++ b/ta/objects/reference.md
@@ -0,0 +1,65 @@
+---
+chapter: 9
+pageNumber: 74
+description: ஒரு பொருளுக்கான குறிப்பு (Reference) என்பது பொருள் சேமிக்கப்பட்டுள்ள நினைவக இருப்பிடத்தை சுட்டிக்காட்டும் மதிப்பாகும். ஒரு பொருள் உருவாக்கப்படும்போது, அதன் பண்புகள் மற்றும் மதிப்புகளைச் சேமிக்க ஒரு நினைவக இடம் ஒதுக்கப்படுகிறது. இந்த பொருளை ஒரு மாறிக்கு (variable) ஒதுக்கும்போது, அந்த மாறி பொருள் சேமிக்கப்பட்டுள்ள நினைவக இருப்பிடத்திற்கான குறிப்பைக் கொண்டுள்ளது.
+---
+# Reference
+
+பொருள்கள் **எப்பொழுதும் நகலெடுக்கப்படுவதில்லை (never copied)**. அவை குறிப்பு (reference) மூலமாக அனுப்பப்படுகின்றன. ஒரு பொருளின் குறிப்பு என்பது ஒரு பொருளைக் குறிக்கும் மதிப்பாகும். `new` ஆபரேட்டர் அல்லது object literal தொடரியலைப் பயன்படுத்தி ஒரு பொருளை உருவாக்கும்போது, ஜாவாஸ்கிரிப்ட் ஒரு பொருளை உருவாக்கி அதற்கு ஒரு குறிப்பை ஒதுக்குகிறது.
+
+Object literal தொடரியலைப் பயன்படுத்தி ஒரு பொருளை உருவாக்குவதற்கான எடுத்துக்காட்டு இங்கே:
+
+```javascript
+var object = {
+ foo: 'bar'
+};
+```
+
+`new` ஆபரேட்டரைப் பயன்படுத்தி ஒரு பொருளை உருவாக்குவதற்கான எடுத்துக்காட்டு இங்கே:
+
+```javascript
+var object = new Object();
+object.foo = 'bar';
+```
+
+ஒரு பொருளின் குறிப்பை ஒரு மாறிக்கு ஒதுக்கும்போது, மாறியானது பொருளையே அல்லாமல் பொருளுக்கான குறிப்பையே வைத்திருக்கும். அதாவது, பொருளின் குறிப்பை வேறொரு மாறிக்கு ஒதுக்கினால், இரண்டு மாறிகளும் ஒரே பொருளை சுட்டிக்காட்டும்.
+
+எடுத்துக்காட்டாக:
+
+```javascript
+var object1 = {
+ foo: 'bar'
+};
+
+var object2 = object1;
+
+console.log(object1 === object2); // Output: true
+```
+
+மேலே உள்ள எடுத்துக்காட்டில், `object1` மற்றும் `object2` இரண்டும் ஒரே பொருளுக்கான குறிப்புகளைக் கொண்ட மாறிகளாகும். `===` ஆபரேட்டர் குறிப்புகளை ஒப்பிடப் பயன்படுகிறது, பொருள்களை அல்ல, மேலும் இரண்டு மாறிகளும் ஒரே பொருளுக்கான குறிப்புகளைக் கொண்டிருப்பதால் இது `true` எனத் திரும்பப் பெறுகிறது.
+
+{% hint style="info" %}
+ஏற்கனவே உள்ள பொருளின் நகலாக ஒரு புதிய பொருளை உருவாக்க `Object.assign()` முறையைப் பயன்படுத்தலாம்.
+{% endhint %}
+
+குறிப்பு மூலம் ஒரு பொருளை உருவாக்குவதற்கான எடுத்துக்காட்டு பின்வருமாறு.
+
+```javascript
+// என்னிடம் ஒரு பீஸ்ஸா இருப்பதாக கற்பனை செய்து பாருங்கள்
+let myPizza = { slices: 5 };
+// அதை நான் உங்களுடன் பகிர்ந்துகொண்டேன்
+let yourPizza = myPizza;
+// நான் மற்றொரு துண்டைச் சாப்பிடுகிறேன்
+myPizza.slices = myPizza.slices - 1;
+let numberOfSlicesLeft = yourPizza.slices;
+// myPizza மற்றும் yourPizza ஒரே பீஸ்ஸா பொருளைக் குறிப்பதால்
+// இப்போது எங்களிடம் 4 துண்டுகள் உள்ளன.
+let a = {},
+ b = {},
+ c = {};
+// a, b, மற்றும் c ஒவ்வொன்றும்
+// வெவ்வேறு வெற்று பொருளைக் குறிக்கின்றன
+a = b = c = {};
+// a, b, மற்றும் c அனைத்தும்
+// ஒரே வெற்று பொருளைக் குறிக்கின்றன
+```
diff --git a/ta/promise-async-await/README.md b/ta/promise-async-await/README.md
new file mode 100644
index 00000000..42c47ddf
--- /dev/null
+++ b/ta/promise-async-await/README.md
@@ -0,0 +1,14 @@
+---
+layout: editorial
+chapter: 18
+pageNumber: 108
+description: Promises இப்போது பெரும்பாலான நவீன API களால் பயன்படுத்தப்படுகின்றன. எனவே அவை எவ்வாறு செயல்படுகின்றன என்பதைப் புரிந்துகொள்வதும், உங்கள் குறியீட்டை மேம்படுத்த அவற்றை எவ்வாறு பயன்படுத்துவது என்பதை அறிவதும் முக்கியம்.
+---
+
+# அத்தியாயம் 18
+# Promise, async/await
+
+Promises இப்போது பெரும்பாலான நவீன API களால் பயன்படுத்தப்படுகின்றன. எனவே அவை எவ்வாறு செயல்படுகின்றன என்பதைப் புரிந்துகொள்வதும் குறியீட்டை மேம்படுத்த அவற்றை எவ்வாறு பயன்படுத்துவது என்பதை அறிவதும் முக்கியம். இந்த அத்தியாயத்தில், promises என்றால் என்ன மற்றும் ஒத்திசைவற்ற (asynchronous) செயல்பாடுகளில் அவற்றை எவ்வாறு பயன்படுத்துவது என்பதை விரிவாக வரையறுப்போம்.
+
+* [Promise](./promise.md)
+* [Async/Await](./async-await.md)
\ No newline at end of file
diff --git a/ta/promise-async-await/async-await.md b/ta/promise-async-await/async-await.md
new file mode 100644
index 00000000..732c3883
--- /dev/null
+++ b/ta/promise-async-await/async-await.md
@@ -0,0 +1,47 @@
+---
+chapter: 18
+pageNumber: 111
+description: Async/Await என்பது ECMAScript 2017 இல் (ES8) அறிமுகப்படுத்தப்பட்ட ஒரு அம்சமாகும், இது ஒத்திசைவற்ற (asynchronous) ஜாவாஸ்கிரிப்ட் குறியீட்டுடன் பணிபுரிய மிகவும் சுருக்கமான மற்றும் படிக்கக்கூடிய தொடரியலை (syntax) வழங்குகிறது. இது ஜாவாஸ்கிரிப்ட் Promises இன் மேல் கட்டமைக்கப்பட்டுள்ளது மற்றும் ஒத்திசைவான (synchronous) முறையில் ஒத்திசைவற்ற செயல்பாடுகளைக் கையாளப் பயன்படுகிறது.
+---
+
+# Async/Await
+
+promises உடன், ஒரு promise ஐத் திரும்பப் பெறும் ஒரு ஒத்திசைவற்ற செயல்பாட்டை அறிவிக்க `async` முக்கிய சொல்லை (keyword) ஒருவர் பயன்படுத்தலாம், அதேசமயம் `await` தொடரியல் ஜாவாஸ்கிரிப்டை அந்த promise தீர்க்கப்பட்டு (settles) அதன் மதிப்பைக் கொடுக்கும் வரை காத்திருக்கச் செய்கிறது. இந்த முக்கிய சொற்கள் promises ஐ எழுத எளிதாக்குகின்றன. async இன் எடுத்துக்காட்டு கீழே காட்டப்பட்டுள்ளது.
+
+```javascript
+//async செயல்பாடு f
+async function f() {
+ return 1;
+}
+// promise தீர்க்கப்படுகிறது (resolved)
+f().then(alert); // 1
+```
+
+மேலே உள்ள உதாரணத்தை பின்வருமாறு எழுதலாம்:
+
+```javascript
+function f() {
+ return Promise.resolve(1);
+}
+
+f().then(alert); // 1
+```
+
+`async` செயல்பாடு ஒரு promise ஐத் திரும்பப் பெறுவதை உறுதிசெய்கிறது, மேலும் promises அல்லாதவற்றை (non-promises) அதனுள் சுற்றிக் கட்டுகிறது (wraps). `await` உடன், promise அதன் மதிப்பைக் கொடுக்கும் வரை நாம் ஜாவாஸ்கிரிப்டைக் காத்திருக்கச் செய்யலாம்.
+
+```javascript
+async function f() {
+ let promise = new Promise((resolve, reject) => {
+ setTimeout(() => resolve("Learn JavaScript க்கு வரவேற்கிறோம்!"), 1000)
+ });
+
+ let result = await promise; // promise தீர்க்கப்படும் வரை காத்திருக்கவும் (*)
+ alert(result); // "Learn JavaScript க்கு வரவேற்கிறோம்!"
+}
+
+f();
+```
+
+{% hint style="working" %}
+`await` முக்கிய சொல்லை ஒரு `async` செயல்பாட்டிற்குள் மட்டுமே பயன்படுத்த முடியும்.
+{% endhint %}
diff --git a/ta/promise-async-await/promise.md b/ta/promise-async-await/promise.md
new file mode 100644
index 00000000..911760da
--- /dev/null
+++ b/ta/promise-async-await/promise.md
@@ -0,0 +1,92 @@
+---
+chapter: 18
+pageNumber: 109
+description: Promise என்பது ஒரு ஒத்திசைவற்ற (asynchronous) செயல்பாட்டின் இறுதி முடிவை (அல்லது தோல்வியை) மற்றும் அதன் விளைவான மதிப்பைக் குறிக்கும் ஒரு பொருளாகும் (object). பிணைய கோரிக்கைகளை (network requests) மேற்கொள்வது, கோப்புகளைப் படிப்பது அல்லது தரவுத்தளங்களுடன் (databases) தொடர்புகொள்வது போன்ற ஒத்திசைவற்ற செயல்பாடுகளைக் கையாள Promises மிகவும் கட்டமைக்கப்பட்ட மற்றும் ஒழுங்கமைக்கப்பட்ட வழியை வழங்குகின்றன.
+---
+
+# Promise, async/await
+
+நீங்கள் ஒரு பிரபலமான புத்தக எழுத்தாளர் என்று கற்பனை செய்து பாருங்கள், ஒரு குறிப்பிட்ட நாளில் ஒரு புதிய புத்தகத்தை வெளியிட திட்டமிட்டுள்ளீர்கள். இந்தப் புத்தகத்தில் ஆர்வம் கொண்ட வாசகர்கள் இந்தப் புத்தகத்தை தங்கள் விருப்பப்பட்டியலில் (wishlist) சேர்த்துக்கொள்கிறார்கள் மற்றும் வெளியிடப்படும் போது அல்லது வெளியீட்டு நாள் ஒத்திவைக்கப்பட்டாலும் கூட அவர்களுக்கு அறிவிக்கப்படும். வெளியீட்டு நாளில், அனைவருக்கும் அறிவிக்கப்படும் மற்றும் புத்தகத்தை வாங்கலாம், இது அனைத்து தரப்பினரையும் மகிழ்விக்கிறது. இது நிரலாக்கத்தில் நடக்கும் நிஜ வாழ்க்கை ஒப்புமையாகும் (analogy).
+
+1. ஒரு "_தயாரிக்கும் குறியீடு (producing code)_" என்பது நேரம் எடுக்கும் மற்றும் ஏதோ ஒன்றை சாதிக்கும் ஒன்று. இங்கே இது ஒரு புத்தக எழுத்தாளர்.
+2. ஒரு "_பயன்படுத்தும் குறியீடு (consuming code)_" என்பது தயாரிக்கும் குறியீடு தயாரானதும் அதைப் பயன்படுத்தும் ஒன்று. இந்த வழக்கில், இது ஒரு "வாசகர் (reader)".
+3. "_தயாரிக்கும் குறியீடு_" மற்றும் "_பயன்படுத்தும் குறியீடு_" ஆகியவற்றிற்கு இடையேயான தொடர்பை ஒரு _promise_ என்று அழைக்கலாம், ஏனெனில் இது "_தயாரிக்கும் குறியீட்டிலிருந்து_" முடிவுகளை "_பயன்படுத்தும் குறியீட்டிற்கு_" பெறுவதை உறுதி செய்கிறது.
+
+# Promise
+
+நாம் செய்த ஒப்புமை ஜாவாஸ்கிரிப்ட் `promise` பொருளுக்கும் பொருந்தும். `promise` பொருளுக்கான கன்ஸ்ட்ரக்டர் (constructor) தொடரியல்:
+
+```javascript
+let promise = new Promise(function(resolve, reject) {
+ // executor (தயாரிக்கும் குறியீடு, "எழுத்தாளர்")
+});
+```
+
+இங்கே, ஒரு செயல்பாடு `new Promise` க்கு அனுப்பப்படுகிறது, இது _executor_ என்றும் அழைக்கப்படுகிறது, மேலும் இது உருவாக்கப்பட்டவுடன் தானாகவே இயங்குகிறது. இது முடிவைக் கொடுக்கும் தயாரிக்கும் குறியீட்டைக் கொண்டுள்ளது. `resolve` மற்றும் `reject` ஆகியவை ஜாவாஸ்கிரிப்ட் தானாகவே வழங்கும் வாதங்கள் (arguments) மற்றும் முடிவுகள் வந்ததும் இவற்றில் ஒன்று அழைக்கப்படும்.
+
+* `resolve(value):` முடிவு வந்தவுடன் `value` ஐத் திரும்பப் பெறும் ஒரு பின்கூப்பிடல் செயல்பாடு (callback function)
+* `reject(error)`: பிழை (error) ஏற்பட்டால் `error` ஐத் திரும்பப் பெறும் ஒரு பின்கூப்பிடல் செயல்பாடு, இது ஒரு பிழைப் பொருளைத் (error object) திரும்பப் பெறுகிறது
+
+
+
+`new Promise` கன்ஸ்ட்ரக்டரால் திரும்பப் பெறப்பட்ட `promise` பொருளின் உள் பண்புகள் (internal properties) பின்வருமாறு:
+
+* `state` - ஆரம்பத்தில் `pending (நிலுவையில் உள்ளது)`, பின்னர் `resolve` செய்யும் போது `fulfill (நிறைவேற்றப்பட்டது)` அல்லது `reject` அழைக்கப்படும் போது `rejected (நிராகரிக்கப்பட்டது)` என்று மாறும்
+* `result` - ஆரம்பத்தில் `undefined`, பின்னர் `resolve` செய்யும் போது `value` ஆக அல்லது `reject` அழைக்கப்படும் போது `error` ஆக மாறும்
+
+{% hint style="working" %}
+ஒருவரால் promise பண்புகளை அணுக முடியாது: `state` மற்றும் `result`. promises ஐக் கையாள Promise முறைகள் தேவை.
+{% endhint %}
+
+ஒரு promise இன் எடுத்துக்காட்டு.
+
+```javascript
+let promiseOne = new Promise(function(resolve, reject) {
+ // promise கட்டமைக்கப்படும் போது செயல்பாடு தானாகவே செயல்படுத்தப்படும்
+
+ // 1-வினாடிக்குப் பிறகு "done" என்ற முடிவோடு வேலை முடிந்துவிட்டது என்பதற்கான சமிக்ஞை
+ setTimeout(() => resolve("done"), 1000);
+})
+
+let promiseTwo = new Promise(function(resolve, reject) {
+ // promise கட்டமைக்கப்படும் போது செயல்பாடு தானாகவே செயல்படுத்தப்படும்
+
+ // 1-வினாடிக்குப் பிறகு "error" என்ற முடிவோடு வேலை முடிந்துவிட்டது என்பதற்கான சமிக்ஞை
+ setTimeout(() => reject(new Error("Whoops!")), 1000);
+})
+```
+
+இங்கே, `promiseOne` என்பது "_நிறைவேற்றப்பட்ட promise க்கான (fulfilled promise)_" ஒரு எடுத்துக்காட்டாகும், ஏனெனில் அது மதிப்புகளை வெற்றிகரமாகத் தீர்க்கிறது, அதேசமயம் `promiseTwo` நிராகரிக்கப்படுவதால் அது ஒரு "_நிராகரிக்கப்பட்ட promise (rejected promise)_" ஆகும். ஆரம்பத்தில் _நிலுவையில் (pending)_ உள்ள promise க்கு மாறாக, நிராகரிக்கப்படாத அல்லது தீர்க்கப்படாத ஒரு promise _செட்டில் (settled)_ promise என்று அழைக்கப்படுகிறது. promise இலிருந்து பயன்படுத்தும் செயல்பாட்டை (Consuming function) `.then` மற்றும் `.catch` முறைகளைப் பயன்படுத்தி பதிவு செய்யலாம். முந்தைய முறைகள் நிறைவடைந்த பிறகு தூய்மைப்படுத்தல் (cleanup) அல்லது இறுதி செய்வதற்கு (finalizing) நாம் `.finally` முறையையும் சேர்க்கலாம்.
+
+```javascript
+let promiseOne = new Promise(function(resolve, reject) {
+ setTimeout(() => resolve("done!"), 1000);
+});
+
+// resolve ஆனது .then இல் உள்ள முதல் செயல்பாட்டை இயக்குகிறது
+promiseOne.then(
+ result => alert(result), // 1 விநாடிக்கு பிறகு "done!" ஐக் காட்டுகிறது
+ error => alert(error) // இயங்காது
+);
+
+let promiseTwo = new Promise(function(resolve, reject) {
+ setTimeout(() => reject(new Error("Whoops!")), 1000);
+});
+
+// reject ஆனது .then இல் உள்ள இரண்டாவது செயல்பாட்டை இயக்குகிறது
+promiseTwo.then(
+ result => alert(result), // இயங்காது
+ error => alert(error) // 1 விநாடிக்கு பிறகு "Error: Whoops!" ஐக் காட்டுகிறது
+);
+
+let promiseThree = new Promise((resolve, reject) => {
+ setTimeout(() => reject(new Error("Whoops!")), 1000);
+});
+
+// .catch(f) என்பது promise.then(null, f) ஐப் போன்றதே
+promiseThree.catch(alert); // 1 விநாடிக்கு பிறகு "Error: Whoops!" ஐக் காட்டுகிறது
+```
+
+{% hint style="working" %}
+`Promise.then()` முறையில், இரண்டு பின்கூப்பிடல் (callback) வாதங்களும் விருப்பமானவை (optional).
+{% endhint %}
diff --git a/ta/regular-expression.md b/ta/regular-expression.md
new file mode 100644
index 00000000..304dddc1
--- /dev/null
+++ b/ta/regular-expression.md
@@ -0,0 +1,268 @@
+---
+layout: editorial
+chapter: 14
+pageNumber: 89
+description: ஒரு Regular expression, பெரும்பாலும் "regex" என்று சுருக்கப்படுகிறது, இது சரங்களுக்குள் (strings) வடிவ பொருத்தம் (pattern matching) மற்றும் தேடலுக்கான ஒரு சக்திவாய்ந்த கருவியாகும். இது குறிப்பிட்ட வடிவங்களின் (patterns) அடிப்படையில் உரையைத் தேட, பொருத்த, மற்றும் கையாள ஒரு சுருக்கமான மற்றும் நெகிழ்வான வழியை வழங்குகிறது.
+---
+
+# அத்தியாயம் 14
+# Regular Expression
+
+ஒரு regular expression என்பது `RegEx` கன்ஸ்ட்ரக்டர் மூலம் உருவாக்கப்படக்கூடிய ஒரு பொருளாகும் (object), அல்லது முன்னோக்கி சாய்வு `(/)` எழுத்துக்களில் ஒரு வடிவத்தை அடைப்பதன் மூலம் ஒரு நேரடி மதிப்பாக (literal value) எழுதப்படும். ஒரு regular expression ஐ உருவாக்குவதற்கான தொடரியல் கீழே காட்டப்பட்டுள்ளது.
+
+```javascript
+// regular expression கன்ஸ்ட்ரக்டரைப் பயன்படுத்துதல்
+new RegExp(pattern[, flags]);
+
+// literals ஐப் பயன்படுத்துதல்
+/pattern/flags
+```
+
+literals ஐப் பயன்படுத்தி ஒரு regular expression ஐ உருவாக்கும் போது கொடிகள் (flags) விருப்பமானவை. மேலே குறிப்பிட்டுள்ள முறையைப் பயன்படுத்தி ஒரே மாதிரியான regular expression ஐ உருவாக்குவதற்கான எடுத்துக்காட்டு பின்வருமாறு.
+
+```javascript
+let re1 = new RegExp("xyz");
+let re2 = /xyz/;
+```
+
+இரண்டு வழிகளிலும் ஒரு regex பொருள் உருவாக்கப்படும் மற்றும் ஒரே முறைகள் மற்றும் பண்புகளைக் கொண்டிருக்கும். ஒரு regular expression ஐ உருவாக்க நமக்கு டைனமிக் மதிப்புகள் தேவைப்படக்கூடிய சந்தர்ப்பங்கள் உள்ளன, அந்தச் சந்தர்ப்பத்தில், literals வேலை செய்யாது மற்றும் கன்ஸ்ட்ரக்டருடன் செல்ல வேண்டும்.
+
+{% hint style="info" %}
+முன்னோக்கி சாய்வு (forward slash) ஒரு regular expression இன் பகுதியாக இருக்க வேண்டும் என்று நாம் விரும்பும் சந்தர்ப்பங்களில், முன்னோக்கி சாய்வை `(/)` பின்தங்கிய சாய்வுடன் `(\)` தப்பிக்க (escape) வேண்டும்.
+{% endhint %}
+
+கேஸ் சென்சிடிவ் இல்லாத (case-insensitive) தேடல்களைச் செய்யப் பயன்படுத்தப்படும் வெவ்வேறு மாற்றிகள் (modifiers):
+
+* `g` - உலகளாவிய தேடல் (global search) (முதல் பொருத்தத்திற்குப் பிறகு நிறுத்தாமல் அனைத்து பொருத்தங்களையும் கண்டறிகிறது)
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "Hello world, hello again!";
+const regex = /hello/gi;
+const matches = str.match(regex);
+// நீங்கள் .match() பற்றி நினைத்தால் இதைப் படியுங்கள் 👇
+// இது ஜாவாஸ்கிரிப்டில் உள்ளமைக்கப்பட்ட ஒரு முறையாகும், இது ஒரு வெளிப்பாட்டிற்கு (expression) எதிரான பொருத்தத்திற்காக ஒரு சரத்தைத் தேடப் பயன்படுகிறது.
+// பொருத்தம் கண்டறியப்பட்டால், கண்டறியப்பட்ட அனைத்துப் பொருத்தங்களின் வரிசையையும் (array) இது திரும்பப் பெறுகிறது. இல்லையெனில், .match() முறை null ஐத் திரும்பப் பெறுகிறது.
+
+console.log(matches); // ["Hello", "hello"]
+```
+
+* `i` - கேஸ் சென்சிடிவ் இல்லாத (case insensitive) தேடல்
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "HeLlO WoRlD";
+const regex = /hello/i;
+const match = regex.test(str);
+// .test() முறை ஒரு பூலியன் மதிப்பைத் திரும்பப் பெறுகிறது:
+// பொருத்தம் கண்டறியப்பட்டால் true, மற்றும் பொருத்தம் கண்டறியப்படவில்லை என்றால் false.
+
+console.log(match); // true
+```
+
+* `m` - பல வரிப் பொருத்தம் (multiline matching)
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "This is a\nmultiline string.";
+const regex = /./mg;
+const matches = str.match(regex);
+// m கொடியானது புதிய வரி எழுத்துக்களை (\n) பொருத்தப் பயன்படுகிறது.
+// அதாவது புதிய வரி எழுத்து உட்பட, சரத்தில் உள்ள 26 எழுத்துக்களுடனும் regex பொருந்தும்.
+
+console.log(matches.length); // 26
+```
+
+_அடைப்புக்குறிகள் (Brackets)_ எழுத்துக்களின் வரம்பைக் (range) கண்டறிய ஒரு regular expression இல் பயன்படுத்தப்படுகின்றன. அவற்றில் சில கீழே குறிப்பிடப்பட்டுள்ளன.
+
+* `[abc]` - அடைப்புக்குறிக்குள் இருக்கும் ஏதேனும் ஒரு எழுத்தைக் கண்டறியும்
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "The cat and the dog are both animals.";
+const regex = /[abc]/g;
+const matches = str.match(regex);
+
+console.log(matches); // a, b மற்றும் c இன் அனைத்து நிகழ்வுகளின் வரிசை (Array)
+
+[
+ 'c', 'a', 'a',
+ 'a', 'b', 'a',
+ 'a'
+]
+```
+
+* `[^abc]` - அடைப்புக்குறிக்குள் இல்லாத எந்தவொரு எழுத்தையும் கண்டறியும்
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "The cat and dog.";
+const regex = /[^abc]/g; // 'a', 'b', அல்லது 'c' அல்லாத எந்தவொரு எழுத்துடனும் பொருந்தும்
+const matches = str.match(regex);
+
+console.log(matches); // 'a', 'b', அல்லது 'c' அல்லாத எழுத்துக்களின் அனைத்து நிகழ்வுகளின் வரிசை
+
+[
+ 'T', 'h', 'e', ' ',
+ 't', ' ', 'n', 'd',
+ ' ', 'd', 'o', 'g',
+ '.'
+]
+
+```
+
+* `[0-9]` - அடைப்புக்குறிக்குள் உள்ள ஏதேனும் ஒரு இலக்கத்தைக் (digit) கண்டறியும்
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "The price of the item is $25, but it may change to $30.";
+const regex = /[0-9]/g; // 0 முதல் 9 வரையிலான எந்த இலக்கத்துடனும் பொருந்தும்
+const matches = str.match(regex);
+
+console.log(matches); // இலக்கங்களின் அனைத்து நிகழ்வுகளின் வரிசை
+
+[
+ '2', '5', '3', '0'
+]
+
+```
+
+* `[^0-9]` - அடைப்புக்குறிக்குள் இல்லாத எந்தவொரு எழுத்தையும் கண்டறியும் (இலக்கம் அல்லாதவை)
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "The price is $25.";
+const regex = /[^0-9]/g; // இலக்கமில்லாத எந்த எழுத்துடனும் பொருந்தும்
+const matches = str.match(regex);
+
+console.log(matches); // இலக்கமற்றவற்றின் அனைத்து நிகழ்வுகளின் வரிசை
+
+[
+ 'T', 'h', 'e', ' ',
+ 'p', 'r', 'i', 'c',
+ 'e', ' ', 'i', 's',
+ ' ', '$', '.'
+]
+
+```
+
+* `(x|y)`- | ஆல் பிரிக்கப்பட்ட மாற்றுகளில் ஏதேனும் ஒன்றைக் கண்டறியும்
+
+எடுத்துக்காட்டு :
+
+```javascript
+const str = "The words 'xylophone' and 'yellow' contain the letters 'x' and 'y'.";
+const regex = /(x|y)/g; // 'x' அல்லது 'y' உடன் பொருந்தும்
+const matches = str.match(regex);
+
+console.log(matches); // 'x' அல்லது 'y' இன் அனைத்து நிகழ்வுகளின் வரிசை
+
+[
+ 'x', 'y', 'y', 'x', 'x', 'y'
+]
+
+```
+
+_Metacharacters_ என்பவை சிறப்பு எழுத்துக்கள், இவை regular expression இல் சிறப்புப் பொருளைக் கொண்டுள்ளன. இந்த எழுத்துக்கள் கீழே மேலும் விவரிக்கப்பட்டுள்ளன:
+
+| Metacharacter | விளக்கம் (Description) |
+| ------------- | ---------------------------------------------------------------- |
+| `.` | புதிய வரி (newline) அல்லது டெர்மினேட்டரைத் தவிர ஒரு எழுத்துடன் (single character) பொருந்தும் |
+| `\w` | ஒரு சொல் எழுத்துடன் பொருந்தும் (எண்-எழுத்து `[a-zA-Z0–9_]`) |
+| `\W` | சொல் அல்லாத எழுத்துடன் பொருந்தும் (`[^a-zA-Z0–9_]` ஐப் போன்றது) |
+| `\d` | எந்த இலக்க எழுத்துடனும் பொருந்தும் ( `[0-9]` ஐப் போன்றது) |
+| `\D` | இலக்கமில்லாத எந்த எழுத்துடனும் பொருந்தும் |
+| `\s` | இடைவெளி எழுத்துடன் பொருந்தும் (spaces, tabs போன்றவை) |
+| `\S` | இடைவெளி இல்லாத எழுத்துடன் பொருந்தும் |
+| `\b` | ஒரு சொல்லின் தொடக்கத்தில் / முடிவில் பொருந்தும் |
+| `\B` | பொருந்தும், ஆனால் ஒரு சொல்லின் தொடக்கத்தில் / முடிவில் அல்ல |
+| `\0` | ஒரு `NULL` எழுத்துடன் பொருந்தும் |
+| `\n` | புதிய வரி (new line) எழுத்துடன் பொருந்தும் |
+| `\f` | form feed எழுத்துடன் பொருந்தும் |
+| `\r` | carriage return எழுத்துடன் பொருந்தும் |
+| `\t` | tab எழுத்துடன் பொருந்தும் |
+| `\v` | tab செங்குத்து (vertical) எழுத்துடன் பொருந்தும் |
+| `\xxx` | ஆக்டல் (octal) எண் `xxx` ஆல் குறிப்பிடப்பட்ட எழுத்துடன் பொருந்தும் |
+| `\xdd` | ஹெக்ஸாடெசிமல் (hexadecimal) எண் `dd` ஆல் குறிப்பிடப்பட்ட எழுத்துடன் பொருந்தும் |
+| `\udddd` | ஹெக்ஸாடெசிமல் எண் `dddd` ஆல் குறிப்பிடப்பட்ட யூனிகோட் (Unicode) எழுத்துடன் பொருந்தும் |
+
+RegEx ஆல் ஆதரிக்கப்படும் பண்புகள் மற்றும் முறைகள் கீழே பட்டியலிடப்பட்டுள்ளன.
+
+| பெயர் (Name) | விளக்கம் (Description) |
+| ------------- | ---------------------------------------------------------------------------------- |
+| `constructor` | RegExp பொருளின் முன்மாதிரியை (prototype) உருவாக்கிய செயல்பாட்டைத் திரும்பப் பெறுகிறது |
+| `exec()` | பொருத்தத்திற்காகச் சோதித்து முதல் பொருத்தத்தைத் திரும்பப் பெறுகிறது, பொருத்தம் இல்லை என்றால் `null` ஐத் திரும்பப் பெறுகிறது |
+| `global` | `g` மாற்றி (modifier) அமைக்கப்பட்டிருக்கிறதா என்று சோதிக்கிறது |
+| `ignoreCase` | `i` மாற்றி அமைக்கப்பட்டிருக்கிறதா என்று சோதிக்கிறது |
+| `lastIndex` | அடுத்த பொருத்தத்தைத் தொடங்க வேண்டிய குறியீட்டைக் (index) குறிப்பிடுகிறது |
+| `multiline` | `m` மாற்றி அமைக்கப்பட்டிருக்கிறதா என்று சோதிக்கிறது |
+| `source` | சரத்தின் (string) உரையைத் திரும்பப் பெறுகிறது |
+| `test()` | பொருத்தத்திற்காகச் சோதித்து `true` அல்லது `false` ஐத் திரும்பப் பெறுகிறது |
+| `toString()` | regular expression இன் சரம் மதிப்பைக் (string value) கொடுக்கிறது |
+
+{% hint style="working" %}
+`complie()` முறையானது regular expression ஐத் தொகுக்கிறது (complies) மற்றும் இது நிராகரிக்கப்பட்டது (deprecated).
+{% endhint %}
+
+### Regular expression இன் பொதுவான உதாரணம்
+
+```javascript
+let text = "The best things in life are free";
+let result = /e/.exec(text); // சரத்தில் e இன் பொருத்தத்தைத் தேடுகிறது
+// result: e
+
+console.log(result); // Result: ["e", 2, "The best things in life ar..."]
+let helloWorldText = "Hello world!";
+// "Hello" ஐத் தேடவும்
+let pattern1 = /Hello/g;
+let result1 = pattern1.test(helloWorldText);
+// result1: true
+
+let pattern1String = pattern1.toString();
+// pattern1String : '/Hello/g'
+```
+
+### பின்கோடு (Pincode) சரிபார்த்தலில் Regex இன் நிஜ வாழ்க்கை உதாரணம்
+
+```javascript
+const handleSubmit = (e) => {
+ // இயல்புநிலை படிவ சமர்ப்பிப்பு நடத்தையைத் தடுக்கவும்
+ e.preventDefault();
+
+ // செல்லுபடியாகும் பின்கோடுகளின் பட்டியலை வரையறுக்கவும்
+ const validPincodes = [
+ 110001, 110002, 110003, 110004, 110005, 110006, 110007, 110008, 110009,
+ 110010, 110011, 110012, 110013, 110014, 110015, 110016, 110017, 110018,
+ 110019, 110020, 110021, 110022, 110023, 110050, 110051, 110056, 110048,
+ 110057, 110058, 110059, 110060, 110061, 110062, 110063, 110064
+ ];
+
+ // செல்லுபடியாகும் பின்கோடுகளை சரங்களாக மாற்றவும்
+ const validPincodeStrings = validPincodes.map((pincode) => String(pincode));
+
+ // செல்லுபடியாகும் பின்கோடுகளுடன் பொருந்துவதற்கு ஒரு regular expression வடிவத்தை (pattern) உருவாக்கவும்
+ const regexPattern = new RegExp(`^(${validPincodeStrings.join("|")})$`);
+
+ // உள்ளீட்டு புலத்தில் (input field) சமர்ப்பிக்கப்பட்ட பின்கோடைப் பெறவும்
+ const submittedPincode = pincode; // 'pincode' வேறு எங்காவது வரையறுக்கப்பட்டுள்ளது என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்
+
+ // சமர்ப்பிக்கப்பட்ட பின்கோடு செல்லுபடியாகும் பின்கோடு வடிவத்துடன் பொருந்துகிறதா எனச் சரிபார்க்கவும்
+ if (regexPattern.test(submittedPincode)) {
+ // வெற்றிச் செய்தியைக் காண்பி
+ // ...
+ } else if (submittedPincode === "") {
+ // வெற்று உள்ளீட்டிற்கான பிழைச் செய்தியைக் காண்பி
+ // ...
+ } else if (submittedPincode.length < 6) {
+ // தவறான பின்கோடு நீளத்திற்கான பிழைச் செய்தியைக் காண்பி
+ // ...
+ }
+}
+```
diff --git a/ta/resources.md b/ta/resources.md
new file mode 100644
index 00000000..c5d94c21
--- /dev/null
+++ b/ta/resources.md
@@ -0,0 +1,74 @@
+---
+pageNumber: V
+chapter:
+---
+# கற்றல் வளங்கள் (Learning Resources)
+
+## ஜாவாஸ்கிரிப்டைக் கற்றுக்கொள்வதற்கான கட்டுரைகள்
+
+
+1. Document Object Model குறிப்பு [Link](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)
+
+2. நிகழ்வுகளின் (Events) அறிமுகம் [Link](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events)
+
+3. Hostinger இன் ஜாவாஸ்கிரிப்ட் அறிமுகம் [Link](https://www.hostinger.com/tutorials/what-is-javascript)
+
+4. Microverse இன் ஜாவாஸ்கிரிப்ட் அறிமுகம் [Link](https://www.microverse.org/blog/introduction-to-javascript-a-guide-for-beginners)
+
+5. Mozilla Developer இன் ஜாவாஸ்கிரிப்ட் அடிப்படைகள் [Link](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics)
+
+6. Geeks for Geeks இன் ஜாவாஸ்கிரிப்ட் பயிற்சி (Tutorial) [Link](https://www.geeksforgeeks.org/javascript/)
+
+7. Stackify இன் ஜாவாஸ்கிரிப்ட் பயிற்சி [Link]( https://stackify.com/learn-javascript-tutorials/)
+
+8. ஜாவாஸ்கிரிப்ட் HTML DOM குறிப்பு [Link](https://www.w3schools.com/js/js_htmldom.asp)
+
+9. DOM என்றால் என்ன? (CSS-Tricks) [Link](https://css-tricks.com/dom/)
+
+## ஜாவாஸ்கிரிப்டைக் கற்றுக்கொள்வதற்கான புத்தகங்கள்
+
+1. A Smarter Way to Learn JavaScript – Mark Myers [Link](https://www.amazon.in/Smarter-Way-Learn-JavaScript-technology-ebook/dp/B00H1W9I6C)
+
+2. Eloquent JavaScript – Marijn Haverbeke [Link](https://www.amazon.in/Eloquent-JavaScript-3rd-Introduction-Programming-ebook/dp/B07C96Q217)
+
+3. Head First JavaScript [Link](https://www.amazon.com/Head-First-JavaScript-Programming-Brain-Friendly/dp/144934013X?tag=javamysqlanta-20)
+
+4. JavaScript: The Good Parts – Douglas Crockford [Link](https://www.amazon.in/Javascript-Good-Parts-D-Crockford/dp/0596517742)
+
+5. Professional JavaScript for Web Developers [Link](https://www.amazon.com/dp/1118026691)
+
+6. Secrets of the JavaScript Ninja [Link](https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X?tag=javamysqlanta-20)
+
+7. The Principles of Object-Oriented JavaScript [Link](https://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404?tag=javamysqlanta-20)
+
+8. You Don’t Know JS – Kyle Simpson [Link](https://www.amazon.in/You-Dont-Know-Set-Volumes/dp/9352136268)
+
+## ஜாவாஸ்கிரிப்டைக் கற்கப் பின்பற்ற வேண்டிய யூடியூப் வளங்கள்
+
+1. Academind - [Link]( https://www.youtube.com/c/Academind)
+2. Akshay Saini - [Link](https://www.youtube.com/@akshaymarch7)
+3. Clever Programmer - [Link](https://www.youtube.com/@CleverProgrammer)
+4. CodeWithHarry - [Link](https://www.youtube.com/c/CodeWithHarry)
+5. Dave Gray - [Link](https://www.youtube.com/@DaveGrayTeachesCode)
+6. freeCodeCamp - [Link](https://www.youtube.com/c/Freecodecamp)
+7. JavaScript Mastery - [Link](https://www.youtube.com/@javascriptmastery)
+8. SuperSimpleDev - [Link](https://www.youtube.com/@SuperSimpleDev)
+9. The Net Ninja - [Link](https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg)
+10. thenewboston - [Link](https://www.youtube.com/@thenewboston)
+11. Traversy Media - [Link](https://www.youtube.com/user/TechGuyWeb)
+
+## பயிற்சி செய்வதற்கான திட்டங்கள் (Projects to Practice)
+
+- [Digital Clock](./beginner-projects/digital-clock.md)
+- [Drum Kits](./beginner-projects/electronic-drum-kit.md)
+- [Expense Tracker](./beginner-projects/expense-tracker.md)
+- [Image Search](./beginner-projects/image-search.md)
+- [Monthly Calendar](./beginner-projects/monthly-calendar.md)
+- [Random Photos Generator](./beginner-projects/random-photos-generator.md)
+- [Rock Paper Scissors Game](./beginner-projects/rock-paper-scissors-game.md)
+- [Simon Says](./beginner-projects/simon-says.md)
+- [Stopwatch](./beginner-projects/simple-stopwatch.md)
+- [Tip Calculator](./beginner-projects/tip-calculator.md)
+- [Video Trailer Popup](./beginner-projects/video-trailer-popup.md)
+- [Weather App](./beginner-projects/weather-app.md)
+- [Whack a Mole](./beginner-projects/whack-a-mole.md)
diff --git a/ta/server-side/README.md b/ta/server-side/README.md
new file mode 100644
index 00000000..4495969b
--- /dev/null
+++ b/ta/server-side/README.md
@@ -0,0 +1,52 @@
+---
+layout: editorial
+chapter: 20
+pageNumber: 141
+---
+
+# அத்தியாயம் 20
+
+# சேவையகப் பக்கக் குறியீடு (Server Side Code)
+
+**சேவையகப் பக்கக் குறியீடு (Server-side code)** என்பது பயனரின் இணைய உலாவியில் (web browser) இயங்குவதை விட *வலைச் சேவையகத்தில் (web server)* இயங்கும் குறியீட்டைக் குறிக்கிறது. இது கிளையன்ட்களிடமிருந்து (பொதுவாக இணைய உலாவிகள்) கோரிக்கைகளைச் (requests) செயலாக்குவதற்கும் மாறும் (dynamic) இணையப் பக்கங்களை உருவாக்குவதற்கும் அல்லது கிளையன்ட்டிற்கு தரவை வழங்குவதற்கும் பொறுப்பாகும்.
+
+**கிளையன்ட் பக்கக் குறியீடு (Client-side code)** என்பது வலைச் சேவையகத்தில் இயங்குவதை விட பயனரின் *இணைய உலாவியில் (web browser)* இயங்கும் குறியீட்டைக் குறிக்கிறது. பயனர் இடைமுகத்தை (user interface) உருவாக்குவதற்கும் பயனர் தொடர்புகளைக் கையாளுவதற்கும் இது பொறுப்பாகும். கிளையன்ட் பக்கக் குறியீடு பொதுவாக ஜாவாஸ்கிரிப்டில் எழுதப்பட்டு உலாவி மூலம் செயல்படுத்தப்படுகிறது.
+
+## நமக்கு ஏன் சேவையகப் பக்கக் குறியீடு தேவை?
+
+வலை வளர்ச்சியில் (web development) சேவையகப் பக்கக் குறியீடு பல காரணங்களுக்காக அவசியம்:
+
+- **பாதுகாப்பு (Security)**: சேவையகப் பக்கக் குறியீடு பயனருக்குத் தெரியாது, எனவே இது கிளையன்ட் பக்கக் குறியீட்டை விடப் பாதுகாப்பானது.
+- **செயல்திறன் (Performance)**: பயனரின் அனுபவத்தைப் பாதிக்காமல், தரவு செயலாக்கம் (data processing) போன்ற கணக்கீட்டுரீதியாக அதிக செலவுபிடிக்கும் பணிகளைச் செய்யச் சேவையகப் பக்கக் குறியீட்டைப் பயன்படுத்தலாம்.
+- **தரவு சேமிப்பு (Data Storage)**: தரவுத்தளத்தில் (database) தரவைச் சேமிக்கச் சேவையகப் பக்கக் குறியீட்டைப் பயன்படுத்தலாம், பின்னர் அதை கிளையன்ட் பக்கக் குறியீடு மூலம் அணுகலாம்.
+- **பயனர் அங்கீகாரம் (User Authentication)**: பயனர்களை அங்கீகரிக்கவும் வலைத்தளத்தின் சில பகுதிகளுக்கான அணுகலைக் கட்டுப்படுத்தவும் சேவையகப் பக்கக் குறியீட்டைப் பயன்படுத்தலாம்.
+- **மாறும் உள்ளடக்கம் (Dynamic Content)**: ஒவ்வொரு பயனருக்கும் தனிப்பயனாக்கக்கூடிய (customized) மாறும் இணையப் பக்கங்களை உருவாக்கச் சேவையகப் பக்கக் குறியீட்டைப் பயன்படுத்தலாம்.
+
+## சேவையகப் பக்கம் vs கிளையன்ட் பக்கம் (Server-side vs. Client-side)
+
+வேறுபாடுகள் கீழே உள்ள அட்டவணையில் சுருக்கப்பட்டுள்ளன:
+
+| சேவையகப் பக்கக் குறியீடு | கிளையன்ட் பக்கக் குறியீடு |
+| ----------- | ----------- |
+| வலைச் சேவையகத்தில் இயங்குகிறது | இணைய உலாவியில் இயங்குகிறது |
+| சேவையக வளங்களுக்கான (கோப்பு முறைமை, தரவுத்தளங்கள் போன்றவை) அணுகலைக் கொண்டுள்ளது. | கிளையன்ட் வளங்களுக்கான (குக்கீகள், உள்ளூர் சேமிப்பு போன்றவை) அணுகலைக் கொண்டுள்ளது. |
+| பல மொழிகளில் எழுதலாம் (PHP, Python, Ruby, Java, C#, போன்றவை). | ஜாவாஸ்கிரிப்டில் மட்டுமே எழுத முடியும். |
+| சேவையகத்தில் HTML ஐ உருவாக்கச் சேவையகப் பக்க ரெண்டரிங் (SSR) பயன்படுத்தப்படலாம். | உலாவியில் HTML ஐ உருவாக்க கிளையன்ட் பக்க ரெண்டரிங் (CSR) பயன்படுத்துகிறது. |
+| தேடுபொறிகளுக்கு உள்ளடக்கம் எளிதாகக் கிடைப்பதால் SEO-வுக்குச் சிறந்தது. | தேடுபொறிகளுக்கு உள்ளடக்கம் எளிதாகக் கிடைக்காததால் SEO-வுக்கு மோசமானது. |
+| செயல்திறனுக்காக கேச்சிங் (caching) மற்றும் உள்ளடக்க விநியோக நெட்வொர்க்குகளை (CDNs) பயன்படுத்த முடியும். | கேச்சிங் மீது குறைந்த கட்டுப்பாடு, உலாவி கேச்சையே நம்பியுள்ளது. |
+
+## சேவையகப் பக்கக் குறியீட்டிற்கு ஜாவாஸ்கிரிப்டை ஏன் பயன்படுத்த வேண்டும்?
+
+ஜாவாஸ்கிரிப்டில் மட்டுமே எழுதக்கூடிய கிளையன்ட் பக்கக் குறியீட்டைப் போலன்றி, சேவையகப் பக்கக் குறியீட்டை PHP, பைதான் (Python), ரூபி (Ruby), ஜாவா (Java), சி# (C#) மற்றும் பல மொழிகளில் எழுதலாம். எனவே சேவையகப் பக்கக் குறியீட்டிற்கு ஜாவாஸ்கிரிப்டை ஏன் பயன்படுத்த வேண்டும்? பல காரணங்கள் உள்ளன:
+
+- **ஒருங்கிணைந்த மொழி (Unified Language)**: டெவலப்பர்கள் முழு பயன்பாட்டு அடுக்கிலும் (application stack) ஒரே மொழி மற்றும் நிரலாக்க முன்னுதாரணங்களைப் (programming paradigms) பயன்படுத்தலாம், இது குறியீடு மறுபயன்பாட்டிற்கும் (code reusability) மற்றும் முன்-முனை (front-end) மற்றும் பின்-முனை (back-end) டெவலப்பர்களிடையே எளிதான ஒத்துழைப்பிற்கும் வழிவகுக்கும்.
+
+- **பெரிய சுற்றுச்சூழல் அமைப்பு (Large Ecosystem)**: npm (Node Package Manager) மூலம் கிடைக்கும் நூலகங்கள் (libraries) மற்றும் தொகுப்புகளின் (packages) பரந்த சுற்றுச்சூழல் அமைப்பை (ecosystem) ஜாவாஸ்கிரிப்ட் கொண்டுள்ளது. இந்தச் செழுமையான சுற்றுச்சூழல் அமைப்பு சேவையக ரூட்டிங் முதல் தரவுத்தள இணைப்பு வரை பல்வேறு செயல்பாடுகளுக்கு முன் கட்டமைக்கப்பட்ட தொகுதிகளை (pre-built modules) வழங்குவதன் மூலம் மேம்பாட்டுச் செயல்முறையை எளிதாக்குகிறது.
+
+- **JSON**: ஜாவாஸ்கிரிப்ட் ஆப்ஜெக்ட் நோட்டேஷன் (JavaScript Object Notation - JSON) என்பது சேவையகம் மற்றும் வலைப் பயன்பாட்டிற்கு இடையே தரவை அனுப்பப் பயன்படும் பிரபலமான தரவு வடிவமாகும். JSON ஜாவாஸ்கிரிப்டை அடிப்படையாகக் கொண்டது, எனவே ஜாவாஸ்கிரிப்டில் JSON தரவுடன் வேலை செய்வது எளிது.
+
+அடுத்து, Node.js உடன் சேவையகப் பக்கக் குறியீட்டிற்கு ஜாவாஸ்கிரிப்டை எவ்வாறு பயன்படுத்துவது மற்றும் சேவையகத்தில் HTML ஐ உருவாக்கச் சேவையகப் பக்க ரெண்டரிங்கை (SSR) எவ்வாறு பயன்படுத்துவது என்பதைக் கற்றுக்கொள்வோம்.
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளை ஆராய்வோம்:
+* [Node.js](./nodejs.md)
+* [சேவையகப் பக்க ரெண்டரிங் (Server Side Rendering - SSR)](./server-side-rendering.md)
\ No newline at end of file
diff --git a/ta/server-side/nodejs.md b/ta/server-side/nodejs.md
new file mode 100644
index 00000000..c77f714d
--- /dev/null
+++ b/ta/server-side/nodejs.md
@@ -0,0 +1,108 @@
+---
+chapter: 20
+pageNumber: 143
+---
+
+# Node.js
+
+**Node.js** என்பது ஒரு ஜாவாஸ்கிரிப்ட் ரன்டைம் சூழலாகும் (runtime environment), இது இணைய உலாவிக்கு (web browser) வெளியே ஜாவாஸ்கிரிப்ட் குறியீட்டை இயக்க டெவலப்பர்களை அனுமதிக்கிறது. இது V8 ஜாவாஸ்கிரிப்ட் இன்ஜினின் மேல் கட்டமைக்கப்பட்டுள்ளது, இது கூகுள் குரோம் (Google Chrome) பயன்படுத்தும் அதே இன்ஜின் ஆகும். Node.js ஓப்பன் சோர்ஸ் (open-source) மற்றும் குறுக்குத் தளமாகும் (cross-platform), அதாவது விண்டோஸ் (Windows), மேக் ஓஎஸ் (macOS) மற்றும் லினக்ஸ் (Linux) ஆகியவற்றில் இயங்க முடியும்.
+
+## Node.js ஒரு நிரலாக்க மொழி அல்ல
+
+Node.js ஒரு நிரலாக்க மொழி என்று பலர் தவறாக நம்புகிறார்கள். இது உண்மையல்ல. Node.js என்பது ஒரு ஜாவாஸ்கிரிப்ட் ரன்டைம் சூழலாகும், அதாவது ஜாவாஸ்கிரிப்ட் குறியீடு இயங்குவதற்கான சூழலை இது வழங்குகிறது. இதுவே ஒரு நிரலாக்க மொழி அல்ல.
+
+Node.js மட்டும் ஒரே ஜாவாஸ்கிரிப்ட் ரன்டைம் சூழல் **அல்ல**. டெனோ (Deno), நாஷார்ன் (Nashorn), மற்றும் மிக சமீபத்தில் பன் (Bun) உட்படப் பல உள்ளன. ஆனால் Node.js ஆனது மிகவும் பிரபலமான மற்றும் பரவலாகப் பயன்படுத்தப்படும் ஜாவாஸ்கிரிப்ட் ரன்டைம் சூழலாகும்.
+
+## Node.js உடன் தொடங்குதல்
+
+Node.js உடன் தொடங்க, அதை உங்கள் கணினியில் நிறுவ வேண்டும். [nodejs.org](https://nodejs.org/en/) இல் உள்ள அதிகாரப்பூர்வ இணையதளத்தில் இருந்து Node.js இன் சமீபத்திய பதிப்பைப் பதிவிறக்கலாம். நீங்கள் Node.js ஐ பதிவிறக்கம் செய்து நிறுவியதும், உங்கள் டெர்மினலில் (terminal) பின்வரும் கட்டளையை இயக்குவதன் மூலம் நிறுவலைச் சரிபார்க்கலாம்:
+
+```bash
+node --version
+```
+
+இது Node.js இன் பதிப்பு எண்ணை இப்படி அச்சிட வேண்டும்:
+
+```bash
+v20.7.0
+```
+## Node.js REPL
+
+REPL என்பது Read Evaluate Print Loop என்பதைக் குறிக்கும் கட்டளை வரி இடைமுகமாகும் (command line interface), இது முனையத்திலிருந்து (terminal) குறியீட்டை இயக்க உதவுகிறது. தொடங்க, உங்கள் டெர்மினலில் பின்வரும் கட்டளையைத் தட்டச்சு செய்யவும்:
+
+```bash
+node
+```
+நீங்கள் இந்த ப்ராம்ப்ட்டை (prompt) உள்ளிட்டதும், நீங்கள் இதுபோன்று குறியீட்டை இயக்கலாம்:
+
+```js
+> console.log("Hello World")
+```
+CTRL + d எனத் தட்டச்சு செய்வதன் மூலம் நீங்கள் REPL ஐ விட்டு வெளியேறலாம்
+
+## உங்களின் முதல் Node.js நிரலை எழுதுதல்
+
+இப்போது நீங்கள் Node.js ஐ நிறுவியுள்ளீர்கள், நமது முதல் Node.js நிரலை எழுதுவோம். `hello.js` எனப்படும் புதிய கோப்பை உருவாக்கி பின்வரும் குறியீட்டைச் சேர்க்கவும்:
+
+```js
+console.log('Hello World!');
+```
+
+இந்த நிரலை இயக்க, உங்கள் டெர்மினலைத் திறந்து `hello.js` கோப்பைச் சேமித்த கோப்பகத்திற்கு (directory) செல்லவும். பின்னர் பின்வரும் கட்டளையை இயக்கவும்:
+
+```bash
+node hello.js
+```
+
+இது பின்வரும் வெளியீட்டை அச்சிட வேண்டும்:
+
+```bash
+Hello World!
+```
+
+## எக்ஸ்பிரஸ் (Express) மற்றும் Node.js ஐப் பயன்படுத்தி எளிமையான வலைச் சேவையகத்தை (web server) எழுதுதல்
+
+எக்ஸ்பிரஸ் (Express) என்பது Node.js க்கான பிரபலமான வலை கட்டமைப்பாகும் (web framework). இது வலை பயன்பாடுகளை உருவாக்குவதற்கான எளிய மற்றும் நேர்த்தியான API ஐ வழங்குகிறது. "Hello World!" செய்தியுடன் HTTP கோரிக்கைகளுக்குப் பதிலளிக்கும் ஒரு எளிய வலைச் சேவையகத்தை உருவாக்க எக்ஸ்பிரஸைப் பயன்படுத்துவோம்.
+
+முதலில், நாம் `npm init` கட்டளையை இயக்குவதன் மூலம் npm ஐ துவக்க வேண்டும்.
+
+```bash
+npm init
+```
+
+பின்னர், எக்ஸ்பிரஸை (express) நிறுவவும்
+
+```bash
+npm install express
+```
+
+இது எக்ஸ்பிரஸ் மற்றும் அதன் அனைத்து சார்புகளையும் (dependencies) நிறுவும். நிறுவல் முடிந்ததும், `server.js` எனப்படும் புதிய கோப்பை உருவாக்கி பின்வரும் குறியீட்டைச் சேர்க்கவும்:
+
+```js
+const express = require('express');
+const app = express();
+
+app.get('/', (req, res) => {
+ res.send('Hello World!');
+});
+
+app.listen(3000, () => {
+ console.log('Server is listening on port 3000');
+});
+```
+
+இந்தக் குறியீடு புதிய எக்ஸ்பிரஸ் பயன்பாட்டை உருவாக்குகிறது மற்றும் ரூட் பாதைக்கான (root path) (`/`) வழியை வரையறுக்கிறது. இந்த வழிக்கு கோரிக்கை விடுக்கப்படும் போது, சேவையகம் "Hello World!" செய்தியுடன் பதிலளிக்கும்.
+
+இந்த நிரலை இயக்க, உங்கள் டெர்மினலைத் திறந்து `server.js` கோப்பைச் சேமித்த கோப்பகத்திற்கு செல்லவும். பின்னர் பின்வரும் கட்டளையை இயக்கவும்:
+
+```bash
+node server.js
+```
+
+இது பின்வரும் வெளியீட்டை அச்சிட வேண்டும்:
+
+```bash
+Server is listening on port 3000
+```
+
+இப்போது உங்கள் இணைய உலாவியைத் திறந்து [http://localhost:3000](http://localhost:3000) க்குச் செல்லவும். "Hello World!" என்ற செய்தியைப் பார்ப்பீர்கள்.
diff --git a/ta/server-side/server-side-rendering.md b/ta/server-side/server-side-rendering.md
new file mode 100644
index 00000000..16a01f00
--- /dev/null
+++ b/ta/server-side/server-side-rendering.md
@@ -0,0 +1,34 @@
+---
+chapter: 20
+pageNumber: 145
+---
+
+# சேவையகப் பக்க ரெண்டரிங் (Server Side Rendering - SSR)
+
+பொதுவாக, பயனர் ஒரு வலைத்தளத்தைப் பார்வையிடும்போது, உலாவி சேவையகத்திற்கு ஒரு கோரிக்கையை அனுப்புகிறது, இது HTML, CSS மற்றும் ஜாவாஸ்கிரிப்ட்டுடன் பதிலளிக்கிறது. ஆனால் *React* மற்றும் *Vue* போன்ற நூலகங்கள் (libraries) மூலம், சேவையகம் ஜாவாஸ்கிரிப்ட் கோப்புடன் வெற்று HTML பக்கத்தை மட்டுமே அனுப்புகிறது. ஜாவாஸ்கிரிப்ட் கோப்பு பின்னர் உலாவியில் பக்கத்தை ரெண்டர் செய்கிறது. இது **கிளையன்ட் பக்க ரெண்டரிங் (Client Side Rendering - CSR)** என்று அழைக்கப்படுகிறது.
+
+**சேவையகப் பக்க ரெண்டரிங் (Server Side Rendering - SSR)** என்பது சேவையகம் கோரிக்கையைச் செயலாக்கி, ரியாக்ட் (React) அல்லது வ்யூ (Vue) கூறுகளிலிருந்து சேவையகத்தில் HTML ஐ உருவாக்கும் ஒரு நுட்பமாகும். சேவையகம் உருவாக்கப்பட்ட HTML ஐ உலாவிக்கு அனுப்புகிறது, அது ஜாவாஸ்கிரிப்ட் ஏற்றப்படும் வரை காத்திருக்காமல் பக்கத்தை ரெண்டர் செய்ய முடியும்.
+
+## SSR ஐ ஏன் பயன்படுத்த வேண்டும்?
+
+CSR ஐ விட SSR ஐப் பயன்படுத்துவதில் பல நன்மைகள் உள்ளன:
+
+- **SEO-க்குச் சிறந்தது (Better for SEO)**: உங்கள் வலைத்தளத்தின் உள்ளடக்கம் சேவையகத்தில் ரெண்டர் செய்யப்பட்டால் தேடுபொறிகள் (Search engines) அதை எளிதாகக் க்ரால் (crawl) செய்து அட்டவணைப்படுத்தலாம் (index). இது சிறந்த தேடுபொறி தரவரிசைக்கும் தேடுபொறிகளிலிருந்து அதிக ட்ராஃபிக்கிற்கும் (traffic) வழிவகுக்கும்.
+
+- **வேகமான ஆரம்பப் பக்க ஏற்றம் (Faster initial page load)**: HTML சேவையகத்தில் உருவாக்கப்படுவதால், பக்கத்தை ரெண்டர் செய்வதற்கு முன் ஜாவாஸ்கிரிப்ட் ஏற்றப்படும் வரை உலாவி காத்திருக்க வேண்டியதில்லை. இது ஆரம்பப் பக்கத்தை வேகமாக ஏற்றும் நேரத்திற்கு வழிவகுக்கும்.
+
+- **குறைந்த-நிலை சாதனங்களில் சிறந்த செயல்திறன் (Better performance on low-end devices)**: HTML சேவையகத்தில் உருவாக்கப்படுவதால், பக்கத்தை ரெண்டர் செய்ய உலாவி அதிக வேலை செய்ய வேண்டியதில்லை. இது மொபைல் போன்கள் மற்றும் டேப்லெட்டுகள் (tablets) போன்ற குறைந்த-நிலை சாதனங்களில் சிறந்த செயல்திறனுக்கு வழிவகுக்கும்.
+
+## SSR இன் தீமைகள்
+
+SSR ஐப் பயன்படுத்துவதில் சில குறைபாடுகளும் உள்ளன:
+
+- **மிகவும் சிக்கலான மேம்பாட்டுச் செயல்முறை (More complex development process)**: SSR க்கு சேவையகப் பக்கத்தில் அதிக வேலை தேவைப்படுகிறது, இது மேம்பாட்டுச் செயல்முறையை மிகவும் சிக்கலாக்கும்.
+
+- **அதிக சேவையக வளங்கள் (More server resources)**: SSR க்கு அதிக சேவையக வளங்கள் தேவைப்படுகின்றன, இது அதிக ஹோஸ்டிங் (hosting) செலவுகளுக்கு வழிவகுக்கும்.
+
+- **வரையறுக்கப்பட்ட கிளையன்ட் பக்கச் செயல்பாடு (Limited client-side functionality)**: jQuery அல்லது Bootstrap போன்ற கிளையன்ட் பக்க நூலகங்களைப் பயன்படுத்த SSR உங்களை அனுமதிக்காது, ஏனெனில் அவை சேவையகத்தில் கிடைக்காது.
+
+## SSR ஐ எவ்வாறு செயல்படுத்துவது?
+
+ஒவ்வொரு நூலகமும் SSR ஐச் செயல்படுத்த அதன் சொந்த வழியைக் கொண்டுள்ளது. எடுத்துக்காட்டாக, React க்கு, நீங்கள் [Next.js](https://nextjs.org/) அல்லது [Gatsby](https://www.gatsbyjs.com/) ஐப் பயன்படுத்தலாம். Vue க்கு, நீங்கள் [Nuxt.js](https://nuxtjs.org/) ஐப் பயன்படுத்தலாம். Svelte க்கு நீங்கள் [SvelteKit](https://kit.svelte.dev/) ஐப் பயன்படுத்தலாம்.
diff --git a/ta/strings/README.md b/ta/strings/README.md
new file mode 100644
index 00000000..884ca607
--- /dev/null
+++ b/ta/strings/README.md
@@ -0,0 +1,61 @@
+---
+layout: editorial
+chapter: 4
+pageNumber: 30
+---
+
+# அத்தியாயம் 4
+# சரங்கள்
+
+JavaScript சரங்கள் மற்ற உயர்-நிலை மொழிகளில் சரம் செயலாக்கங்களுடன் பல ஒற்றுமைகளைப் பகிர்ந்து கொள்கின்றன. அவை உரை-அடிப்படையிலான செய்திகளையும் தரவையும் குறிக்கின்றன. இந்த பாடத்தில், புதிய சரங்களை எவ்வாறு உருவாக்குவது மற்றும் அவற்றில் பொதுவான செயல்பாடுகளை எவ்வாறு செய்வது என்பது உட்பட அடிப்படைகளை கற்போம்.
+
+இங்கே ஒரு சரத்தின் எடுத்துக்காட்டு:
+
+```
+"Hello World"
+```
+
+சர குறியீடுகள் பூஜ்ய-அடிப்படையிலானவை, அதாவது `0` இல் உள்ள முதல் எழுத்தின் தொடக்க நிலை மற்றும் அதைத் தொடர்ந்து ஏறுவரிசையில் மற்றவை. சர மூலம் பல்வேறு முறைகள் ஆதரிக்கப்படுகின்றன மற்றும் ஒரு புதிய மதிப்பை திரும்பப் பெறுகின்றன. இந்த முறைகள் கீழே விவரிக்கப்பட்டுள்ளன.
+
+| பெயர் | விளக்கம் |
+| -------------------- | -------------------------------------------------------------------------------------- |
+| `charAt()` | குறிப்பிட்ட குறியீட்டில் உள்ள எழுத்தை திரும்பப் பெறுகிறது |
+| `charCodeAt()` | குறிப்பிட்ட குறியீட்டில் Unicode எழுத்தை திரும்பப் பெறுகிறது |
+| `concat()` | இரண்டு அல்லது அதிகமான இணைந்த சரங்களை திரும்பப் பெறுகிறது |
+| `constructor` | சரத்தின் constructor செயல்பாட்டை திரும்பப் பெறுகிறது |
+| `endsWith()` | ஒரு சரம் குறிப்பிட்ட மதிப்பில் முடிகிறதா என்று சரிபார்க்கிறது |
+| `fromCharCode()` | Unicode மதிப்புகளை எழுத்துகளாக திரும்பப் பெறுகிறது |
+| `includes()` | ஒரு சரம் குறிப்பிட்ட மதிப்பை கொண்டுள்ளதா என்று சரிபார்க்கிறது |
+| `indexOf()` | அதன் முதல் நிகழ்வின் குறியீட்டை திரும்பப் பெறுகிறது |
+| `lastIndexOf()` | அதன் கடைசி நிகழ்வின் குறியீட்டை திரும்பப் பெறுகிறது |
+| `length` | சரத்தின் நீளத்தை திரும்பப் பெறுகிறது |
+| `localeCompare()` | locale உடன் இரண்டு சரங்களை ஒப்பிடுகிறது |
+| `match()` | ஒரு மதிப்பு அல்லது வழக்கமான வெளிப்பாட்டிற்கு எதிராக ஒரு சரத்தை பொருத்துகிறது |
+| `prototype` | ஒரு பொருளின் பண்புகள் மற்றும் முறைகளை சேர்க்க பயன்படுத்தப்படுகிறது |
+| `repeat()` | குறிப்பிட்ட நகல்களின் எண்ணிக்கையுடன் புதிய சரத்தை திரும்பப் பெறுகிறது |
+| `replace()` | வழக்கமான வெளிப்பாடு அல்லது மதிப்புடன் ஒரு சரம் மூலம் மாற்றப்பட்ட மதிப்புகளுடன் சரத்தை திரும்பப் பெறுகிறது |
+| `search()` | ஒரு மதிப்பு அல்லது வழக்கமான வெளிப்பாட்டிற்கு எதிராக ஒரு சரத்தின் பொருத்தத்தின் அடிப்படையில் குறியீட்டை திரும்பப் பெறுகிறது |
+| `slice()` | ஒரு சரத்தின் ஒரு பகுதியை கொண்ட சரத்தை திரும்பப் பெறுகிறது |
+| `split()` | சரத்தை உள்சரங்களின் வரிசையாக பிரிக்கிறது |
+| `startsWith()` | குறிப்பிட்ட எழுத்திற்கு எதிராக சரங்களின் தொடக்கத்தை சரிபார்க்கிறது |
+| `substr()` | தொடக்க குறியீட்டிலிருந்து சரத்தின் ஒரு பகுதியை பிரித்தெடுக்கிறது |
+| `substring()` | இரண்டு குறியீடுகளுக்கு இடையில் சரத்தின் ஒரு பகுதியை பிரித்தெடுக்கிறது |
+| `toLocaleLowerCase()` | host இன் locale ஐப் பயன்படுத்தி சிறிய எழுத்துகளுடன் சரத்தை திரும்பப் பெறுகிறது |
+| `toLocaleUpperCase()` | host இன் locale ஐப் பயன்படுத்தி பெரிய எழுத்துகளுடன் சரத்தை திரும்பப் பெறுகிறது |
+| `toLowerCase()` | சிறிய எழுத்துகளுடன் சரத்தை திரும்பப் பெறுகிறது |
+| `toString()` | சரம் அல்லது சர பொருளை சரமாக திரும்பப் பெறுகிறது |
+| `toUpperCase()` | பெரிய எழுத்துகளுடன் சரத்தை திரும்பப் பெறுகிறது |
+| `trim()` | வெற்றிடங்கள் நீக்கப்பட்ட சரத்தை திரும்பப் பெறுகிறது |
+| `trimEnd()` | இறுதியில் இருந்து வெற்றிடங்கள் நீக்கப்பட்ட சரத்தை திரும்பப் பெறுகிறது |
+| `trimStart()` | தொடக்கத்தில் இருந்து வெற்றிடங்கள் நீக்கப்பட்ட சரத்தை திரும்பப் பெறுகிறது |
+| `valueOf()` | சரம் அல்லது சர பொருளின் primitive மதிப்பை திரும்பப் பெறுகிறது |
+
+
+இந்த அத்தியாயத்தில், பின்வரும் தலைப்புகளை ஆராய்வோம்:
+* [CharAt](./charAt.md)
+* [Concat](./concat.md)
+* [உருவாக்கம்](./create.md)
+* [நீளம்](./length.md)
+* [மாற்று](./replace.md)
+* [பிரிக்கவும்](./split.md)
+* [உள்சரம்](./substring.md)
\ No newline at end of file
diff --git a/ta/strings/charAt.md b/ta/strings/charAt.md
new file mode 100644
index 00000000..d49a75c8
--- /dev/null
+++ b/ta/strings/charAt.md
@@ -0,0 +1,52 @@
+---
+chapter: 4
+pageNumber: 37
+---
+# CharAt
+
+`str.charAt()` முறை சரத்தின் கொடுக்கப்பட்ட குறியீட்டில் உள்ள எழுத்தை திரும்பப் பெறுகிறது, குறியீடு வரிசை உறுப்பு நிலையை வைத்திருக்கிறது.
+* `charAt()` முறையைப் பயன்படுத்தி
+* template literal `(``)` ஐப் பயன்படுத்தி ([ES6](../es6-concepts/template-literals.md) இல் அறிமுகப்படுத்தப்பட்டது)
+
+`charAt()` முறை ஏற்கிறது:
+
+* **வாதங்கள்**: இந்த செயல்பாட்டிற்கான ஒரே வாதம் சரத்தில் ஒரு எழுத்தை பிரித்தெடுக்க வேண்டிய குறியீடாகும்.
+
+* **குறியீடு**: இந்த குறியீட்டின் வரம்பு `0` மற்றும் length `–1` க்கு இடையில் உள்ளது. குறியீடு எதுவும் குறிப்பிடப்படவில்லை என்றால் சரத்தின் முதல் எழுத்து `0` என திரும்பப் பெறப்படும், ஏனென்றால் `0` இந்த செயல்பாட்டிற்கு பயன்படுத்தப்படும் இயல்புநிலை குறியீடாகும்.
+
+* **திரும்ப மதிப்பு**: செயல்பாட்டிற்கு வாதமாக குறிப்பிட்ட குறியீட்டில் அமைந்துள்ள ஒரு எழுத்தை திரும்பப் பெறுகிறது. குறியீடு வரம்பிற்கு வெளியே இருந்தால், இந்த செயல்பாடு ஒரு காலி சரத்தை திரும்பப் பெறுகிறது.
+
+```javascript
+//எடுத்துக்காட்டு 1:
+function func() {
+ // அசல் சரம்
+ let str = 'JavaScript is object oriented language';
+
+ // கொடுக்கப்பட்ட குறியீட்டில் உள்ள எழுத்தை கண்டுபிடி
+ let value = str.charAt(0);
+ let value1 = str.charAt(4);
+ console.log(value);
+ console.log(value1);
+}
+func();
+
+//வெளியீடு
+j
+s
+
+//எடுத்துக்காட்டு 2:
+function func() {
+
+ // அசல் சரம்
+ let str = 'JavaScript is object oriented language';
+
+ // கொடுக்கப்பட்ட குறியீட்டில் உள்ள எழுத்தை கண்டுபிடி
+ let value = str.charAt(9);
+ console.log(value);
+}
+func();
+
+
+//வெளியீடு
+t
+```
\ No newline at end of file
diff --git a/ta/strings/concat.md b/ta/strings/concat.md
new file mode 100644
index 00000000..4da08b6c
--- /dev/null
+++ b/ta/strings/concat.md
@@ -0,0 +1,32 @@
+---
+chapter: 4
+pageNumber: 35
+---
+# இணைப்பு
+
+இணைப்பு என்பது இரண்டு அல்லது அதிகமான சரங்களை ஒன்றாக இணைப்பதை உள்ளடக்குகிறது, இந்த அசல் சரங்களின் ஒருங்கிணைந்த தரவை கொண்ட ஒரு பெரிய சரத்தை உருவாக்குகிறது. ஒரு சரத்தின் இணைப்பு ஒன்று அல்லது அதிகமான சரங்களை மற்றொரு சரத்துடன் இணைக்கிறது. இது JavaScript இல் பின்வரும் வழிகளில் செய்யப்படுகிறது:
+
+* **`+`** ஆபரேட்டரைப் பயன்படுத்தி
+* `concat()` முறையைப் பயன்படுத்தி
+* வரிசை `join()` முறையைப் பயன்படுத்தி
+* template `(``)` literal ஐப் பயன்படுத்தி ([ES6](../es6-concepts/template-literals.md) இல் அறிமுகப்படுத்தப்பட்டது)
+
+சர `concat()` முறை சரங்களின் பட்டியலை அளவுருக்களாக ஏற்று அனைத்து சரங்களின் இணைப்பிற்கு பிறகு ஒரு புதிய சரத்தை திரும்பப் பெறுகிறது. வரிசை `join()` முறை ஒரு வரிசையில் உள்ள அனைத்து உறுப்புகளையும் ஒரு சரமாக மாற்றி இணைக்க பயன்படுத்தப்படுகிறது.
+
+Template literal backtick `(``)` ஐப் பயன்படுத்துகிறது மற்றும் பல வரி சரங்களை உருவாக்கவும் சர interpolation செய்யவும் எளிதான வழியை வழங்குகிறது. `$` அடையாளம் மற்றும் சுருள் பிரேஸ்களைப் பயன்படுத்தி backtick க்குள் ஒரு வெளிப்பாட்டை பயன்படுத்தலாம் `${expression}`.
+
+```javascript
+const icon = '👋';
+// template Strings பயன்படுத்தி
+`hi ${icon}`;
+
+// join() Method பயன்படுத்தி
+['hi', icon].join(' ');
+
+// concat() Method பயன்படுத்தி
+''.concat('hi ', icon);
+
+// + operator பயன்படுத்தி
+'hi ' + icon;
+// hi 👋
+```
diff --git a/ta/strings/create.md b/ta/strings/create.md
new file mode 100644
index 00000000..1b6dd237
--- /dev/null
+++ b/ta/strings/create.md
@@ -0,0 +1,64 @@
+---
+chapter: 4
+pageNumber: 32
+---
+# உருவாக்கம்
+
+சரங்களை ஒற்றை மேற்கோள்கள் அல்லது இரட்டை மேற்கோள்களில் உரையை இணைப்பதன் மூலம் வரையறுக்கலாம்:
+
+```javascript
+// ஒற்றை மேற்கோள்களைப் பயன்படுத்தலாம்
+let str = 'நமது அழகான சரம்';
+
+// இரட்டை மேற்கோள்களும் கூட
+let otherStr = "இன்னொரு நல்ல சரம்";
+```
+
+Javascript இல், சரங்கள் UTF-8 எழுத்துகளை கொண்டிருக்கலாம்:
+
+```
+"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어";
+```
+
+ஒரு சர பொருளை உருவாக்க `String` constructor ஐயும் பயன்படுத்தலாம்:
+
+```javascript
+const stringObject = new String('இது ஒரு சரம்');
+```
+
+இருப்பினும், சரங்களை உருவாக்க `String` constructor ஐப் பயன்படுத்துவது பொதுவாக பரிந்துரைக்கப்படவில்லை, ஏனென்றால் இது சர primitives மற்றும் சர பொருட்களுக்கு இடையே குழப்பத்தை ஏற்படுத்தலாம். சரங்களை உருவாக்க சர literals ஐப் பயன்படுத்துவது பொதுவாக சிறந்தது.
+
+சரங்களை உருவாக்க template literals ஐயும் பயன்படுத்தலாம். Template literals என்பது backticks `(``)` இல் இணைக்கப்பட்ட சரங்கள் மற்றும் மதிப்புகளுக்கான placeholders ஐ கொண்டிருக்கலாம். Placeholders `` `${}` `` தொடரியலுடன் குறிக்கப்படுகின்றன.
+
+```javascript
+const name = 'John';
+const message = `வணக்கம், ${name}!`;
+```
+
+Template literals பல வரிகளை கொண்டிருக்கலாம் மற்றும் placeholders க்குள் எந்த வெளிப்பாட்டையும் சேர்க்கலாம்.
+
+{% hint style="working" %}
+சரங்களை கழிக்கவோ, பெருக்கவோ அல்லது வகுக்கவோ முடியாது.
+{% endhint %}
+
+{% exercise %}
+`name` மற்றும் `age` இன் மதிப்புகளை உள்ளடக்கிய ஒரு சரத்தை உருவாக்க ஒரு template literal ஐப் பயன்படுத்தவும். சரம் பின்வரும் வடிவத்தில் இருக்க வேண்டும்: "My name is John and I am 25 years old."
+
+{% initial %}
+let name = "John";
+let age = 25;
+
+// My name is John and I am 25 years old.
+let result =
+{% solution %}
+let name = "John";
+let age = 25;
+
+// My name is John and I am 25 years old.
+let result = `My name is ${name} and I am ${age} years old.`
+
+{% validation %}
+assert(result == "My name is John and I am 25 years old.");
+
+{% context %}
+{% endexercise %}
diff --git a/ta/strings/length.md b/ta/strings/length.md
new file mode 100644
index 00000000..8c6b9445
--- /dev/null
+++ b/ta/strings/length.md
@@ -0,0 +1,25 @@
+---
+chapter: 4
+pageNumber: 34
+---
+# நீளம்
+
+`.length` பண்பைப் பயன்படுத்தி JavaScript இல் ஒரு சரத்தில் எத்தனை எழுத்துகள் உள்ளன என்பதை அறிவது எளிது. `length` பண்பு இடைவெளிகள் மற்றும் சிறப்பு எழுத்துகள் உட்பட சரத்தில் உள்ள எழுத்துகளின் எண்ணிக்கையை திரும்பப் பெறுகிறது.
+
+```javascript
+
+let size = "நமது அழகான சரம்".length;
+console.log(size);
+// size: 17
+
+let emptyStringSize = "".length
+console.log(emptyStringSize);
+// emptyStringSize: 0
+
+```
+
+ஒரு காலி சரத்தின் length பண்பு `0`.
+
+{% hint style="working" %}
+`length` பண்பு ஒரு படிக்கமட்டும் பண்பு, எனவே அதற்கு புதிய மதிப்பை ஒதுக்க முடியாது.
+{% endhint %}
diff --git a/ta/strings/replace.md b/ta/strings/replace.md
new file mode 100644
index 00000000..76765ef9
--- /dev/null
+++ b/ta/strings/replace.md
@@ -0,0 +1,30 @@
+---
+chapter: 4
+pageNumber: 33
+---
+# மாற்று
+
+`replace` முறை ஒரு எழுத்தை, வார்த்தையை அல்லது வாக்கியத்தை ஒரு சரத்துடன் மாற்ற அனுமதிக்கிறது. எடுத்துக்காட்டாக:
+
+```javascript
+let str = "Hello World!";
+let new_str = str.replace("Hello", "Hi");
+
+console.log(new_str);
+
+// Result: Hi World!
+```
+
+{% hint style="working" %}
+`g` modifier அமைக்கப்பட்ட [வழக்கமான வெளிப்பாட்டின்](../regular-expression.md) அனைத்து நிகழ்வுகளிலும் ஒரு மதிப்பை மாற்ற.
+{% endhint %}
+
+இது ஒரு மதிப்பு அல்லது வழக்கமான வெளிப்பாட்டிற்காக ஒரு சரத்தை தேடுகிறது மற்றும் மதிப்பு(கள்) மாற்றப்பட்ட புதிய சரத்தை திரும்பப் பெறுகிறது. இது அசல் சரத்தை மாற்றாது. உலகளாவிய case-insensitive மாற்று எடுத்துக்காட்டை பார்ப்போம்.
+
+```javascript
+let text = "Mr Blue has a blue house and a blue car";
+let result = text.replace(/blue/gi, "red");
+
+console.log(result);
+//Result: Mr red has a red house and a red car
+```
diff --git a/ta/strings/split.md b/ta/strings/split.md
new file mode 100644
index 00000000..1f221dfa
--- /dev/null
+++ b/ta/strings/split.md
@@ -0,0 +1,46 @@
+---
+chapter: 4
+pageNumber: 36
+---
+# பிரிக்கவும்
+
+`split()` முறை ஒரு சரத்தை உள்சரங்களின் பட்டியலாக பிரிக்கிறது மற்றும் அவற்றை வரிசையாக திரும்பப் பெறுகிறது.
+* `split()` முறையைப் பயன்படுத்தி
+* template literal ஐப் பயன்படுத்தி (ES6 இல் அறிமுகப்படுத்தப்பட்டது)
+
+`split()` முறை ஏற்கிறது:
+
+* **separator (விரும்பினால்)** - ஒவ்வொரு பிரிவும் எங்கே நடக்க வேண்டும் என்பதை விவரிக்கும் வடிவம் (சரம் அல்லது வழக்கமான வெளிப்பாடு).
+* **limit (விரும்பினால்)** - கொடுக்கப்பட்ட சரத்தை எத்தனை துண்டுகளாக பிரிக்க வேண்டும் என்பதை வரம்பிடும் ஒரு எதிர்மறை இல்லாத முழு எண்.
+
+```javascript
+console.log("ABCDEF".split("")); // [ 'A', 'B', 'C', 'D', 'E', 'F' ]
+
+const text = "Java is awesome. Java is fun.";
+
+let pattern = ".";
+let newText = text.split(pattern);
+console.log(newText); // [ 'Java is awesome', ' Java is fun', '' ]
+
+let pattern1 = ".";
+// சரத்தை அதிகபட்சம் 2 பகுதிகளாக மட்டும் பிரி
+let newText1 = text.split(pattern1, 2);
+console.log(newText1); // [ 'Java is awesome', ' Java is fun' ]
+
+const text2 = "JavaScript ; Python ;C;C++";
+let pattern2 = ";";
+let newText2 = text2.split(pattern2);
+console.log(newText2); // [ 'JavaScript ', ' Python ', 'C', 'C++' ]
+
+// RegEx பயன்படுத்தி
+let pattern3 = /\s*(?:;|$)\s*/;
+let newText3 = text2.split(pattern3);
+console.log(newText3); // [ 'JavaScript', 'Python', 'C', 'C++' ]
+
+//வெளியீடு
+[ 'A', 'B', 'C', 'D', 'E', 'F' ]
+[ 'Java is awesome', ' Java is fun', '' ]
+[ 'Java is awesome', ' Java is fun' ]
+[ 'JavaScript ', ' Python ', 'C', 'C++' ]
+[ 'JavaScript', 'Python', 'C', 'C++' ]
+```
diff --git a/ta/strings/substring.md b/ta/strings/substring.md
new file mode 100644
index 00000000..5f753ab4
--- /dev/null
+++ b/ta/strings/substring.md
@@ -0,0 +1,59 @@
+---
+chapter: 4
+pageNumber: 38
+---
+# உள்சரம்
+
+`string.substring()` என்பது JavaScript இல் உள்ள ஒரு உள்ளமைக்கப்பட்ட செயல்பாடு, இது கொடுக்கப்பட்ட சரத்தின் தொடக்க குறியீட்டிலிருந்து இறுதி குறியீட்டு வரையிலான பகுதியை திரும்பப் பெற பயன்படுத்தப்படுகிறது. குறியீட்டு பூஜ்ய `(0)` இலிருந்து தொடங்குகிறது.
+
+தொடரியல்:
+
+`string.substring(StartIndex, EndIndex)`
+
+### தொடரியல்
+
+* `str.substring(startIndex, endIndex)`
+* `substring()` முறையைப் பயன்படுத்தி
+* template `(``)` literal ஐப் பயன்படுத்தி ([ES6](../es6-concepts/template-literals.md) இல் அறிமுகப்படுத்தப்பட்டது)
+
+`substring()` முறை ஏற்கிறது:
+
+* **அளவுருக்கள்**: `startIndex` மற்றும் `endIndex` (விரும்பினால்) — உள்சரத்தை எடுக்க வேண்டிய தொடக்க/இறுதி குறியீடுகள். `endIndex` சேர்க்கப்படவில்லை என்றால் சரத்தின் முடிவு வரை எடுத்துக்கொள்கிறது.
+* **திரும்ப மதிப்பு**: இது கொடுக்கப்பட்ட சரத்தின் ஒரு பகுதியான புதிய சரத்தை திரும்பப் பெறுகிறது. `string.substring()` செயல்பாட்டின் செயல்பாட்டை காட்ட JavaScript குறியீடு:
+
+```javascript
+//எடுத்துக்காட்டு 1:
+// substring() முறையை விளக்க JavaScript
+
+const str = "GeeksforGeeks";
+const result = str.substring(8);
+console.log(result);
+
+
+
+//வெளியீடு
+Geeks
+
+```
+
+```javascript
+
+//எடுத்துக்காட்டு 2:
+// ஒரு சரத்தை variable ஆக எடுத்தல்
+let string = "geeksforgeeks";
+a = string.substring(-1)
+b = string.substring(2.5)
+c = string.substring(2.9)
+
+// கொடுக்கப்பட்ட சரத்தின் பகுதியான
+// புதிய சரங்களை அச்சிடுகிறது
+console.log(a);
+console.log(b);
+console.log(c);
+
+
+//வெளியீடு
+geeksforgeeks
+eksforgeeks
+eksforgeeks
+```
// 📁 message.js
+const message = (name, age) => {
+ return `${name} இன் வயது ${age}.`;
+};
+export default message;
+