คุณรู้จักสิ่งที่น่าสนใจเหล่านี้ใน Javascript หรือไม่?
1. ทำไมผลลัพธ์ของโค้ดต่อไปนี้จึงแปลก ?
console.log(null > 0); // false
console.log(null === 0); // false
console.log(null >= 0); // true
คุณอาจมีคำถามว่าเหตุใดจึงแปลงเป็น 0 เท่านั้น เนื่องจากในจาวาสคริปต์ตัวดำเนินการอัลกอริทึมการเปรียบเทียบได้รับการออกแบบในลักษณะที่จะแปลงค่าที่ไม่ใช่ตัวเลขเป็นค่าตัวเลข ในนั้น มันจะแปลงค่าบูลีน (จริงหรือเท็จ) เป็น 1 และ 0, null เป็น 0 และ undefined เป็นเท็จ คุณสามารถอ้างอิงเพิ่มเติมได้ที่นี่
เพื่อสรุปสิ่งนี้ เราสามารถพูดได้ว่าสำหรับคำสั่งแรก null > 0 แทนที่ภายในด้วย 0 > 0 เนื่องจากอัลกอริทึมการเปรียบเทียบจาวาสคริปต์ คำสั่งที่สอง null === 0 ให้เป็นเท็จ เพราะที่นี่เรากำลังพยายามตรวจสอบความเท่าเทียมกันของค่าว่างด้วย 0 โดยใช้ ตัวดำเนินการความเท่าเทียมกัน (==, ===)
2. คุณสามารถส่งพารามิเตอร์ได้กี่ตัวใน JSON.parse() หรือ JSON.stringify() ?
มาดูกันทีละคน
JSON.stringity():
Syntax: JSON.stringify(value, [replacer, space])
const user = {
firstName: 'John',
lastName: 'Williams',
dob: "12-31-1997"
}
console.log(JSON.stringify(user));
// Output
{"firstName":"John","lastName":"Williams","dob":"12-31-1997"}
console.log(JSON.stringify(user, ['firstName', 'lastName'], 5));
// Output
{
"firstName": "John",
"lastName": "Williams"
}
Syntax: JSON.parse(text, [reviver])
ในตัวอย่างข้างต้น สมมติว่าเราต้องการแปลง dob เป็นประเภท Date ก่อนที่มันจะแยกวิเคราะห์ สามารถทำได้ด้วยฟังก์ชั่นผู้ตรวจสอบด้านล่าง
const reviewer = (key, value) => {
if (key === 'dob') {
value = new Date(value);
}
return value;
}
JSON.parse(JSON.stringify(user), reviewer)
// Output
{
dob: Wed Dec 31 1997 00:00:00 GMT+0530 (India Standard Time) {}
firstName: "John"
lastName: "Williams"
}
หมายความว่าการสร้างวัตถุที่ไม่ได้รับอนุญาตให้เปลี่ยนค่าคุณสมบัติ ป้องกันการเพิ่มคุณสมบัติใหม่ หรือการลบคุณสมบัติออกจากวัตถุ เรามาดูกันว่ามันทำงานอย่างไร
Object.freeze() :
มันถูกใช้เพื่อตรึงอ็อบเจกต์ในลักษณะง่ายๆ ที่เราพูดได้ว่าคุณไม่สามารถเพิ่ม ลบ หรือเปลี่ยนคุณสมบัติใดๆ ของอ็อบเจกต์ได้ นอกจากนี้ยังสามารถสรุปได้เนื่องจากวัตถุพร้อมใช้งานสำหรับวัตถุประสงค์ในการอ่านอย่างเดียว
const obj = {
firstName: 'Richard',
lastName: 'Williams'
}
Object.freeze(obj); // Will not allowed to change any value or to add new property in it
obj.dob = '31-12-1991'; // Will give error if use strict is applied else it ignores
obj.firstName = 'John';
console.log(obj);
// Output
{
firstName: 'Richard',
lastName: 'Williams'
}
Object.seal():
หากเราต้องการให้วัตถุทำงานในลักษณะเดียวกับที่ object.freeze() ทำ แต่ค่าของคุณสมบัติของวัตถุสามารถเขียนได้ แต่ไม่สามารถเปลี่ยนแปลงต้นแบบของวัตถุได้ เราก็สามารถใช้ object.seal()
พูดง่ายๆ ก็คือ เราได้รับอนุญาตให้เปลี่ยนค่าวัตถุได้โดยใช้สิ่งนี้ แต่ไม่สามารถเพิ่มหรือลบคีย์ของวัตถุใดๆ ได้
const obj = {
firstName: 'Richard',
lastName: 'Williams'
}
Object.seal(obj); // Will allow to change only value of it's, can't add new property in it
obj.dob = '31-12-1991';
obj.firstName = 'John';
delete obj.firstName;
console.log(obj);
// Output
{
firstName: 'John',
lastName: 'Williams'
}
- ในฐานะนักพัฒนา JS คุณต้องใช้ตัวลดขนาด () ที่ไหนสักแห่ง มันเป็นฟังก์ชั่นที่ดีมากจาก javascript และยังมีอีกหนึ่งฟังก์ชั่นที่ทำงานเหมือน reduce() และนั่นคือ reduceRight() แต่ความแตกต่างคือมันทำงานจากขวาไปซ้าย ในขณะที่ reduce() จะทำงานจากซ้ายไปขวา บนอาร์เรย์
- หากต้องการแบนจำนวน N ของอาร์เรย์ที่ซ้อนกัน คุณสามารถใช้Array.flat(Infinity )
- การมอบหมายการรวมศูนย์เป็นโมฆะ (??=) :
const obj = { name : 'Johnathon'};
obj.name ??= 'John';
obj.age ??= 25;
console.log(obj.name, obj.age); // Johnathon 25
const obj = {
name : 'John',
age: 24
};
obj.name &&= 'Johnathon';
obj.age &&= 25;
console.log(obj.name, obj.age); // Johnathon 25
5. ตรรกะหรือการกำหนด (||=) :
const obj = {
name : '',
age: 25
};
obj.name ||= 'Johnathon';
obj.age ||= 40;
console.log(obj.name, obj.age); // Johnathon 25
สำหรับเคล็ดลับการเขียนโปรแกรมและ JavaScript เพิ่มเติม โปรดติดตาม ขอบคุณสำหรับการอ่าน!
มีความสุขในการเขียนโค้ด ❤️!…