Я просто хотел добавить, что
if(variableThing){
// do something
}
совпадает с
if(!!variableThing){
// do something
}
Но это может быть проблемой, когда что-то не определено.
// a is undefined, b is empty object.
var a, b = {};
// Both of these give error a.foo is not defined etc.
// you'd see the same behavior for !!a.foo and !!b.foo.bar
a.foo
b.foo.bar
// This works -- these return undefined
a && a.foo
b.foo && b.foo.bar
b && b.foo && b.foo.bar
Трюк здесь - цепочка &&
s вернет первое значение ложности, которое он найдет, - и это может быть передано в оператор if и т. д. Поэтому, если b.foo не определено, оно будет возвращено undefined и пропущено b.foo.bar
, и мы не получаем ошибки.
Вышеуказанные возвраты не определены, но если у вас есть пустая строка, false, null, 0, undefined эти значения вернутся и вскоре, когда мы встретим их в цепь []
и {}
являются правдивыми.