Javascript или оператор не работает - PullRequest
6 голосов
/ 18 марта 2011
var strExt  = GetAttributeFromItemTable(itemTable, "Ext", "FileType");

Я сделал предупреждение для strExt, и оно разрешается. if (strExt! = 'wav') { // это работает }

if (strExt!='wav' || strExt!='mp3')
{
// this does not work.
}

Ответы [ 6 ]

13 голосов
/ 18 марта 2011

Ваша логика несовершенна:

если бы ваша переменная strExt была равна 'wav', она бы не была бы равна 'mp3', и наоборот-visa.

Пожалуйста, объясните желаемые результаты более четко.

Я думаю, что вы пытаетесь сказать что-то вроде (ни 'wav' , ни 'mp3'):

if ( !( strExt == 'wav' || strExt == 'mp3' ) )

, что логически эквивалентно (не 'wav' и не 'mp3'):

if ( strExt != 'wav' && strExt != 'mp3' ) )
1 голос
/ 18 марта 2011

|| говорит: если какое-либо условие истинно, я верну истину, не глядя на те, которые следуют за ним.

То есть true || false верно, falls || true верно.

В вашем случае вы говорите: «если strExt не равен wav и не равен mp3, выполните». В случае, если одно из них истинно, оно выполняется.

Я думаю, что вы ищете символ &&. logical and говорит: «Я верну истину, только если каждое условие истинно» - когда оно встречается с ложью, оно возвращает ложь.

Как я думаю, ваш код должен выглядеть так:

if (strExt!='wav' && strExt!='mp3')
1 голос
/ 18 марта 2011

Я ожидаю, что результатом второго выражения будет True независимо от значения строки strExt (любое расширение не равно "wav" или не равно "mp3"). Что вы ожидаете?

Вы уверены, что не имеете в виду логическое И вместо ИЛИ ("расширение не является ни" wav ", ни" mp3 "")?

0 голосов
/ 14 января 2019

просто добавьте еще одну скобку, например так:

if ((strExt!='wav') || (strExt!='mp3'))
 {
     // this does not work.
 }
0 голосов
/ 18 марта 2011

Если вы хотите войти в секунду if, когда strExt не равно 'wav' и 'mp3', вам необходимо использовать оператор &&.

if (strExt!='wav' || strExt!='mp3')

когда strExt='wav' => strExt!='wav' = false; strExt!='mp3' = true => false или true = true и попадает в оператор if и имеет место, когда strExt='mp3'.

0 голосов
/ 18 марта 2011

Логика, стоящая за этим, не имеет смысла, если бы вы не захотели:

if ((strExt !== "wav") && strExt !== "mp3") {

}

И вместо ИЛИ имеет больше смысла в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...