﻿# V7007\. The '\|' and '&' operators bypass short\-circuit evaluation\. The right\-hand operand will be evaluated even when the left operand is false\.

Анализатор обнаружил использование оператора без вычисления по короткой схеме \(& или \|\) в контексте, где, возможно, предполагался оператор с сокращённым вычислением \(&& или \|\|\)\.

Пример:

```cpp
function process(obj) {
  if (obj !== null & isValid(obj)) {
    // ....
  }
}

function isValid(obj) {
  return obj.someProperty !== undefined
}
```

Если в качестве операндов задействованы ресурсоемкие операции, то использование битовых операций не оптимально\. Кроме того, такой код может привести к ошибкам из\-за различий в типах операндов и приоритетах операций, а также к неожиданному поведению, если правый операнд имеет побочные эффекты или зависит от условий, задаваемых левым\.

Например, если в функцию `process` первым аргументом передан `null`, то, несмотря на проверку, произойдёт вычисление правого операнда, что приведёт к исключению:

```cpp
TypeError: Cannot read properties of null (reading 'someProperty')
```

Корректный код:

```cpp
function process(obj) {
  if (obj !== null && isValid(obj)) {
    // ....
  }
}

function isValid(obj) {
  return obj.someProperty !== undefined
}
```