вторник, 23 сентября 2014 г.

== vs ===

Во всех случаях рекомендуется использовать строгое сравнение во избежание ряда ошибок.


== - сравнение с попыткой преобразования к типам друг друга.
=== - сравнение при сторогом совпадении типов.

1. Даже если известно, что типы сравниваемых значений совпадают, нет смысла использоваться нестрогим сравнением. Строгое сравнение как минимум не медленнее, при этом не нарушается единообразие подхода (зачем использовать два типа сравнений?).

2. undefined == null // true, 
но
undefined === null // false
Часто эти значения следует различать. Если же допустимы оба, то лучше это подчеркнуть отдельно:
if (x === undefined || x === null)

Допустим вариант if (!x) ... "пропускающий" значения undefined, null, false, 0, "".

3. При сравнении чисел и строк можно принудительно приводить переменную к нужному типу, что повышает ясность кода:

if (Number(x) === 123) ...
if (String(x) === "abc") ...

4. При сравнении литералов с примитивами срабатывает только нестрогое сравнение.

var s = new String("abc");
console.log(s == "abc");  // true
console.log(s === "abc"); // false

Однако здесь возможны варианты с принудительным приведением:

console.log(String(s) === "abc"); // true
console.log(s.ValueOf() === "abc"); // true

5. В некоторых случаях предпочтительна жесткая проверка на типы с соответствующей реакцией. Можно выбирать различные варианты:

function is123Explicit(x) {
        x = Number(x);
        return x === 123;

    }

или

function is123Defensive(x) {
        if (typeof x !== "number") {
            throw new TypeError("Not a number: "+x);
        }
        return x === 123;
    }

Комментариев нет :

Отправить комментарий