PDA

Просмотр полной версии : Logical OR


Liar
07.03.2006, 22:27
Всем привет :)
может ктонить подскажет, почему не работает следующая конструкция:

//-------------------------------------
switch (shape) {
case ("Shell" || "Cover")
//разные всякие операторы тут :)
break;
}
//-------------------------------------

тоесть она работает почемута только тогда, когда
var shape = "Cover", а если "Shell" - никак. может я туплю просто, но если подскажете - буду премного... :)

заранее muchas gracias :)

K.A.T.A.F.A.L.K.E.R
07.03.2006, 22:52
switch (shape) {
case "Shell":
case "Cover":
//разные всякие операторы тут
break;
}

Iv
07.03.2006, 22:54
зависит от версии плеера.
trace(("Shell" || "Cover"))
даст в разных плеерах разный результат.

схема такая:
по-моему начиная с 8ки непустые строки возвращают true в boolean операциях
в 7ке любые строки возвращают false
но судя по признакам ты публикуешь в восьмерку.
т.е. твое выражение
"Shell" || "Cover"
в 8ке всегда вернет "Shell", (trace(("Shell" || "Cover")))
и далее происходит сравнение с case
если равны, то выполняется.

думаю, что дальше продолжать не надо.

не... всё ботва...
ща воткнул trace(("Shell" || "Cover")) дает Cover
при этом trace((Boolean("Shell") || "Cover")) дает true
бред. иду спать.
надеюсь подсказал направление.

Iv
09.03.2006, 21:38
нашел причину моей путанницы и в итоге написал багрепорт в макромедию.
причина - баг компиляции.
trace(("Shell" || "Cover")) - дает "Cover"
при этом
var shell = "Shell"
var cover = "Cover"
trace(shell || cover) - дает "Shell" - и именно это правильно