Javascript ArrayBuffer - Невозможно установить нулевое значение для массива буферов - PullRequest
0 голосов
/ 08 октября 2019
// Creating an ArrayBuffer with a size in bytes 
var buffer = new ArrayBuffer(16); 

// Creating views 
var view1 = new DataView(buffer);

// Putting 1 in slot 0 
view1.setInt8(0, null);

console.log(view1.getInt8(0));

Результат: 0

Ожидается: null

Как установить нулевые / пустые данные? У нас есть способ проверить нулевые данные в массиве буферов?

Например: у нас есть CSV-файл с такими данными:

0,,1,0

Большое вам спасибо

1 Ответ

0 голосов
/ 08 октября 2019

Из документов MDN ArrayBuffer (выделено):

Объект ArrayBuffer используется для представления общих исходных двоичных данных фиксированной длиныбуфер.

Т.е. ArrayBuffers содержат только двоичные (Number) значения. По этой причине API DataView позволяет устанавливать только значения с плавающей запятой или целочисленные значения. null, однако, не является числом. Это одно из примитивных значений JS .

. Это можно увидеть в спецификации EcmaScript, где на шаге 4 абстрактной операции SetValueInBuffer у вас есть "Assert: Type(значение) - это число. "Спецификация, однако, не определяет, как обрабатывать нечисловые типы. Можно утверждать, что в этом случае должен быть выдан TypeError, но все реализации, которые я проверял (Chrome, Safari, Firefox, Node.js), спокойно приводят значение к нулю ... что вы и видите. Вы получите то же поведение, если передадите String, Date, RegEx, Boolean или undefined.

(Если вы передадите BigInt или Symbolоднако, вы, похоже, получили ошибку типа ... странно.)

...