2014-01-27 4 views
2

Я начинаю копать зубы в позвоночник, а когда я работаю с функцией роутера, создавая и уничтожая виды, я сталкивался с этим небольшим фрагментом, что для меня не имело смысла, поскольку я всегда принимал на себя только такие виды операторов работа в условных операторах,Javascript логический оператор && в операторах?

this.view && this.view.remove(); 

Он был внутри метода присоединенной к маршрутизатору, который, кажется, работает как шарм, но я всегда усталый вуду кода, который не сидит хорошо со мной.

Heres полный метод

loadView : function(view) { 
     this.view && this.view.remove(); 
     this.view = view; 
    } 

Очень хотелось бы, чтобы понять это немного лучше, надеюсь, что его не слишком глупо спрашивать.

Cheers.

+0

У вас есть [look] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators) при документации логических операторов javascript. – Ralf

ответ

5

В JavaScript:

this.view && this.view.remove(); 

эквивалентно

this.view ? this.view.remove() : this.view; 

Правая сторона выполняется только если левая сторона truthy. Если значение выражения игнорируется, а сторона левая не имеет побочных эффектов (как в данном случае), то это также эквивалентно следующему:

if (this.view) { 
    this.view.remove(); 
} 

Таким образом, в данном конкретном случае, если есть существующий view , то он удаляется. Обратите внимание, что значение этого выражения не обязательно является логическим (в отличие от многих других языков); это то, что возвращается remove. Однако это значение игнорируется, поэтому оно не имеет особого отношения.

+1

Другими словами, это эквивалентно: if (this.view) this.view.remove(); – hindmost

+0

Да. Просто добавив, что :) –

+0

, если я правильно понимаю, что он не отличается от использования синтаксиса if() {}, поэтому его просто сокращает его, есть ли какие-либо особые условия для того, что передавалось слева или оно идентично? – pushplaybang

1

Оператор && в javascript оценивает первое выражение, если оно ложно, оно возвращается, если оно правдиво, второе выражение оценивается и возвращается.

Для || это наоборот: первое выражение оценивается, если оно истинно, оно возвращается, иначе второе выражение оценивается и возвращается.

+1

* «Оператор && в javascript возвращает true, когда ...» * '&&' не обязательно возвращает true. * "... таким образом выполняется, если это функция, если первый оператор возвращает логическое значение true." * Он не требует, чтобы логический истинный результат из его операнда считался истинным. –

+0

@ cookie yep Я смутил его ^^. – user1950929

+0

хорошо, спасибо за дополнительную информацию о «или», может ли это использоваться в назначениях переменных? существуют ли особые условия для его использования? – pushplaybang

Смежные вопросы