typeof true === "boolean"

Для меня приведенная выше строка кода подвержена ошибкам, потому что строка "boolean" может быть легко написана с ошибкой:

typeof true === "Boolean"

Так что для этого должна быть лучшая встроенная функция.

0
free_lions_n_tigers_from_cages 10 Окт 2021 в 04:05

4 ответа

Лучший ответ

Вы можете сравнить с typeof true.

if(typeof someVar === typeof true){

}
1
Unmitigated 10 Окт 2021 в 01:50

Я полагаю, вы могли бы сравнить два возможных значения:

if (someVal === true || someVal === false)

Который вызовет ошибку ReferenceError, если вы ошиблись в написании одного из них, но в остальном JavaScript не обладает той строгостью, которую вы ищете.

Это одна из ситуаций, в которой я настоятельно рекомендую TypeScript, который действительно предупредит вас о том, чтобы делать такие вещи (а также предупредит вас о многих других ошибках, связанных с типом, которые легко сделать):

const someBool = Math.random() < 0.5 ? '123' : true;
if (typeof someBool === 'boolea') {
    
}

Бросает

Это условие всегда будет возвращать 'false', поскольку типы '"строка" | «номер» | "bigint" | "логическое" | «символ» | "неопределенный" | «объект» | "function" 'и' "boolea" 'не пересекаются.

enter image description here

Я считаю TypeScript незаменимым для любого скрипта разумного размера из-за множества возможных ошибок, от которых он защищает - он может превратить раздражающие или трудно поддающиеся отладке ошибки времени выполнения в легко исправимые ошибки времени компиляции.

0
CertainPerformance 10 Окт 2021 в 01:09

Я использую этот фрагмент в своем коде

// Type checker function
const isType = (type, val) => !!(val.constructor && val.constructor.name.toLowerCase() === type.toLowerCase());

// Tests
console.log(isType("array", []));
console.log(isType("object", {}));
console.log(isType("regexp", new RegExp("foobar")));
console.log(isType("BOOlean", false));

// Last is false
console.log(isType("string", []));
0
tarkh 10 Окт 2021 в 01:32

Как упоминалось другими, проверка во время компиляции (например, TypeScript) - лучший способ проверить строки, написанные в исходном коде (потому что проверка происходит до времени выполнения и потому что она не добавляет потери производительности к вашему выполнению). Однако, если вы ищете чисто временное решение, которое вызовет ошибку, если вы введете недопустимую строку в свой код, вы можете использовать что-то вроде этого:

const types = new Set([
  'bigint',
  'boolean',
  'function',
  'number',
  'object',
  'string',
  'symbol',
  'undefined',
]);

function isType (type, value) {
  if (!types.has(type)) throw new TypeError(`Invalid type: "${type}"`);
  return typeof value === type;
}

// example
console.log(isType('boolean', true)); //=> true
console.log(isType('boolean', false)); //=> true
console.log(isType('boolean', 'hello')); //=> false
console.log(isType('Boolean', true)); //=> TypeError
0
jsejcksn 10 Окт 2021 в 01:46