2012-03-05 4 views
4

Я искал через некоторый скомпилированный код кофе-сценарий, и я заметил, что-то вроде следующего, который я думал, было очень странно:Javascript или и операторы присваивания

var current, x = 8; 
current = this._head || (this._head = x); 

после запуска этого ток имеет значение 8. Судя по тому, что || логический оператор работает, я бы ожидал, что он сначала оценит левую сторону. После получения «неопределенного» с левой стороны, он перемещается вправо, где он присваивает this._head до 8. Впоследствии он возвращает true, но эта часть не так важна? Я не вижу, как он может вернуться и повлиять на «текущую» переменную? Любая помощь будет оценена, спасибо!

+0

ОН! Я просто понял, что меня разыгрывают на приоритете оператора. || оператор происходит до того, как любое значение будет присвоено текущему. Я по существу представлял current = this._head со скобками вокруг него. всем спасибо! – elju

ответ

1

Оператор || возвращает значение, а не true. Может быть, это помогает сказать, что

current = this._head || (this._head = x) 

также может быть записана в виде

current = this._head ? this._head : (this._head = x); 

или

current = this._head; 

if(!current) 
    current = this._head = x; 
0

Вы можете использовать expresion

var current=this._head ? this._head : (this._head = x); 
1
  1. Операторвозвращает левую сторону, если он «правдивый», в противном случае - с правой стороны - независимо от его правдоподобия. Это не листинг выражение для логического true/false!
    • undefined || (this._head = x) возвращает с правой стороны
  2. Оператор присваивания также возвращает значение!
    • this._head = x возвращает 8 в приведенном выше примере
  3. Оператор первое назначение присваивает значение 8 переменной current
Смежные вопросы