ArrayBuffer.isView() คืออะไร
เมธอดสแตติก ArrayBuffer.isView() ใช้สำหรับ ตรวจสอบว่าค่าที่ส่งเข้ามาเป็น "view" ของ ArrayBuffer หรือไม่ โดย "view" ในที่นี้หมายถึงออบเจ็กต์ที่มองข้อมูลใน ArrayBuffer ผ่านมุมมองที่แตกต่างกัน ได้แก่:
- Typed Arrays:
Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array - DataView:
DataView
ไวยากรณ์ (Syntax)
ArrayBuffer.isView(arg)
arg- ค่าที่ต้องการตรวจสอบ
คืนค่า: true หาก arg เป็น typed array หรือ DataView, false หากไม่ใช่
ตัวอย่างการใช้งาน
ตัวอย่างที่ 1: ตรวจสอบ Typed Arrays
console.log(ArrayBuffer.isView(new Int8Array())); // true
console.log(ArrayBuffer.isView(new Uint8Array(10))); // true
console.log(ArrayBuffer.isView(new Uint8ClampedArray())); // true
console.log(ArrayBuffer.isView(new Int16Array())); // true
console.log(ArrayBuffer.isView(new Uint16Array())); // true
console.log(ArrayBuffer.isView(new Int32Array())); // true
console.log(ArrayBuffer.isView(new Uint32Array())); // true
console.log(ArrayBuffer.isView(new Float32Array())); // true
console.log(ArrayBuffer.isView(new Float64Array())); // true
console.log(ArrayBuffer.isView(new BigInt64Array())); // true
console.log(ArrayBuffer.isView(new BigUint64Array())); // true
ตัวอย่างที่ 2: ตรวจสอบ DataView
const buffer = new ArrayBuffer(16);
const dataView = new DataView(buffer);
console.log(ArrayBuffer.isView(dataView)); // true
ตัวอย่างที่ 3: ค่าที่คืน false
console.log(ArrayBuffer.isView([])); // false (regular array)
console.log(ArrayBuffer.isView({})); // false (plain object)
console.log(ArrayBuffer.isView(null)); // false
console.log(ArrayBuffer.isView(undefined)); // false
console.log(ArrayBuffer.isView(123)); // false
console.log(ArrayBuffer.isView("string")); // false
console.log(ArrayBuffer.isView(new ArrayBuffer(10))); // false (ArrayBuffer เองไม่ใช่ view)
console.log(ArrayBuffer.isView(() => {})); // false (function)
ตัวอย่างที่ 4: การใช้งานจริง - Validation Function
function processBufferView(view) {
if (!ArrayBuffer.isView(view)) {
throw new TypeError('Expected an ArrayBuffer view (TypedArray or DataView)');
}
// ทำงานกับ view ได้อย่างปลอดภัย
console.log(`Processing ${view.constructor.name} of length ${view.byteLength}`);
if (view instanceof DataView) {
// DataView specific logic
} else {
// TypedArray specific logic
}
}
// ทดสอบ
processBufferView(new Uint8Array(10)); // OK
processBufferView(new DataView(new ArrayBuffer(10))); // OK
processBufferView([1,2,3]); // TypeError
ตารางสรุป: อะไรคือ View, อะไรไม่ใช่
| ประเภท | ตัวอย่าง | isView() |
|---|---|---|
| Typed Arrays (ทั้งหมด) | Int8Array, Uint8Array, Float32Array, BigInt64Array, etc. | true |
| DataView | new DataView(buffer) | true |
| ArrayBuffer | new ArrayBuffer(10) | false |
| Regular Array | [1,2,3] | false |
| Plain Object | {a: 1} | false |
| Null / Undefined | null, undefined | false |
| Primitive values | 123, "str", true | false |
กรณีการใช้งานทั่วไป
- Input validation: ตรวจสอบ argument ในฟังก์ชันที่รับ ArrayBuffer view
- Polymorphic functions: ฟังก์ชันที่รับทั้ง TypedArray และ DataView
- Serialization: ตรวจสอบก่อน serialize binary data
- Debugging: ตรวจสอบประเภทออบเจ็กต์ในระหว่างพัฒนา