Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

คุณสมบัติ ArrayBuffer.byteLength ใน JavaScript

ArrayBuffer.byteLength คืออะไร

คุณสมบัติ byteLength ของ ArrayBuffer เป็นคุณสมบัติแบบอ่านอย่างเดียว (read-only) ที่คืนค่า ขนาดของ Array Buffer ในหน่วยไบต์ (bytes) เป็นจำนวนเต็มไม่มีเครื่องหมาย 32-bit (unsigned 32-bit integer)

ค่านี้ถูกกำหนดตอนสร้าง ArrayBuffer และ ไม่สามารถเปลี่ยนแปลงได้ ตลอดชีวิตของออบเจ็กต์

ไวยากรณ์ (Syntax)

arrayBuffer.byteLength

คืนค่า: จำนวนเต็มแทนขนาดในหน่วยไบต์

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: การสร้างและตรวจสอบขนาด

const buffer = new ArrayBuffer(8);
console.log(buffer.byteLength); // 8

const buffer2 = new ArrayBuffer(1024);
console.log(buffer2.byteLength); // 1024

ตัวอย่างที่ 2: การสร้างด้วยค่าที่ไม่ใช่ตัวเลข

// สร้างด้วย string - JavaScript จะแปลงเป็นตัวเลข (NaN -> 0)
const buffer = new ArrayBuffer("Hello");
console.log(buffer.byteLength); // 0

// สร้างด้วย object ที่มี valueOf
const obj = { valueOf: () => 100 };
const buffer2 = new ArrayBuffer(obj);
console.log(buffer2.byteLength); // 100

ตัวอย่างที่ 3: การใช้งานกับ Typed Arrays และ DataView

const buffer = new ArrayBuffer(100);
const int32 = new Int32Array(buffer);
const dataView = new DataView(buffer, 20, 30);

console.log('ArrayBuffer:', buffer.byteLength);    // 100
console.log('Int32Array:', int32.byteLength);      // 100
console.log('DataView:', dataView.byteLength);     // 30 (เฉพาะส่วนที่ view มองเห็น)

ข้อจำกัดและข้อผิดพลาด (Constraints & Errors)

1. ค่าติดลบ (Negative values)

try {
  new ArrayBuffer(-72);
} catch (e) {
  console.log(e.name);    // RangeError
  console.log(e.message); // Invalid array buffer length
}

2. ค่าที่ใหญ่เกินไป (Exceeds maximum size)

ขนาดสูงสุดคือ 2^53 - 1 ไบต์ (ประมาณ 8 PB - petabytes)

try {
  new ArrayBuffer(9007199254740995); // 2^53 + 3
} catch (e) {
  console.log(e.name);    // RangeError
  console.log(e.message); // Array buffer allocation failed
}

3. ค่าที่ไม่ใช่จำนวนเต็ม (Non-integer values)

// Float - จะถูก truncate
const buffer1 = new ArrayBuffer(10.9);
console.log(buffer1.byteLength); // 10

// Complex number - Syntax Error (ไม่ใช่ valid JavaScript)
// new ArrayBuffer(2+3i); // SyntaxError: Invalid or unexpected token

4. NaN และ Infinity

console.log(new ArrayBuffer(NaN).byteLength);     // 0
console.log(new ArrayBuffer(Infinity).byteLength); // 0 (RangeError ในบาง engine)

ความสัมพันธ์กับ Views

เมื่อสร้าง View (TypedArray หรือ DataView) จาก ArrayBuffer:

  • view.byteLength ≤ buffer.byteLength
  • view.byteOffset + view.byteLength ≤ buffer.byteLength

กรณีการใช้งานทั่วไป

  • Validation: ตรวจสอบขนาด buffer ก่อนประมวลผล
  • Memory management: ติดตามการใช้หน่วยความจำ
  • Protocol parsing: ตรวจสอบว่า buffer มีขนาดพอสำหรับ header/body
  • Bounds checking: คำนวณ offset และ length สำหรับ views

สรุป

คุณสมบัติรายละเอียด
ชนิดRead-only property
ชนิดข้อมูลUnsigned 32-bit integer
ค่าสูงสุด2^53 - 1 bytes (~8 PB)
ค่าต่ำสุด0 bytes
กำหนดเมื่อตอนสร้าง (constructor)
เปลี่ยนแปลงได้ไม่ได้