Кажется, что ваш реальный вопрос:
Почему:
null >= 0; // true
Но:
null == 0; // false
Что действительно происходит, так это то, что Оператор большего или равного (>=
) выполняет принуждение типа ( ToPrimitive
) с типом hint Number
, на самом деле все реляционные операторы имеют такое поведение.
null
особым образом обрабатывается оператором равенства (==
). Вкратце, только принуждает к undefined
:
null == null; // true
null == undefined; // true
Значения, такие как false
, ''
, '0'
и []
, подлежат к числовому типу принуждения, все из них принуждают к нулю.
Вы можете увидеть внутренние детали этого процесса в Алгоритм сравнения абстрактного равенства и . Абстрактное реляционное сравнение Алгоритм .
В резюме:
ToNumber
. Это то же самое, что добавить перед +
фронт, который для нулевых когерентностей равен 0
. ToNumber
для строк, чисел и логических элементов. Я думаю, что проблема здесь в том, что getPCIHWAddr () использует индекс набора информации об устройстве, который уже уничтожен. Я добавил функцию, которая возвращает указатели на HDEVINFO и SP_DEVINFO_DATA, но не вызывает SetupDiDestroyDeviceInfoList (), это делается методом getPCIHWAddr () после того, как он выполнил свою работу - и вижу: Это работает (Win7 и Win10).