条件声明未按预期工作

时间:2015-10-12 17:36:06

标签: javascript if-statement

我有以下代码,应首先检查navigator.platform,如果用户从iPhone或iPad以外的设备进入该页面,则重定向到给定页面。但是,它目前正在将iPad和iPhone设备重定向到该页面。

    var param = document.location.search.split("?link=");

//IF DEVICE IS NOT IPHONE, REDIRECT USER TO OTHER PLATFORM PAGE
    if (navigator.platform != 'iPhone' || navigator.platform != 'iPad')
    {
        window.location.replace("other-platform.html");
    }

    else if(param[1] === 'faq-link' && navigator.platform === 'iPhone' || 'iPad' )
    {
        window.location.replace("#");
    }

    else if (param[1] === 'footer-link' && navigator.platform === 'iPhone' || 'iPad')
    {
        window.location.replace("#");
    }

    else if(param[1] === 'share-page-A-getapp' && navigator.platform === 'iPhone' || 'iPad')
    {
        window.location.replace("#");
    }

    else if(param[1] === 'share-page-B-getapp' && navigator.platform === 'iPhone' || 'iPad')
    {
        window.location.replace("#");
    }

    else if(param[1] === 'share-page-C-getapp' && navigator.platform === 'iPhone' || 'iPad')
    {
        window.location.replace("#");
    }

3 个答案:

答案 0 :(得分:1)

想想这里的逻辑:

if (navigator.platform != 'iPhone' || navigator.platform != 'iPad')

如果navigator.platform 等于" iPhone",则 等于" iPad&# 34 ;.如果它等于" iPad",则它不等于" iPhone"。因此,if测试始终为true,因为所有字符串都不等于" iPhone"或者不等于" iPad"。

||应为&&

随后,涉及'iPhone' || 'iPad'的测试没有按照您的想法进行。拿第一个:

else if (param[1] === 'faq-link' && navigator.platform === 'iPhone' || 'iPad' )

我们可以添加括号来显示JavaScript如何解释表达式:

else if (((param[1] === 'faq-link') && (navigator.platform === 'iPhone')) || 'iPad' )

也就是说,它将param[1]与字符串" faq-link"进行比较。第一。如果成功,则将navigator.platform与字符串" iPhone"进行比较。如果这也成功,则测试成立。但是,如果这两个测试中的一个失败,则||运算符的另一侧是字符串常量'iPad',并且始终将其解释为true。因此,这些比较条款中的每一个也具有始终如一的条件。

要解决这些问题,您需要做的就是摆脱" iPhone"和" iPad",因为一旦你修复了上面描述的第一个测试,其他测试可以安全地假设navigator.platform是" iPhone"也不是" iPad"。所以测试只是:

else if (param[1] === 'faq-link')

答案 1 :(得分:1)

你的if条件有错误,最后一个: 例如,     (param [1] ==='faq-link'&& navigator.platform ==='iPhone'||'iPad') 应该     (param [1] ==='faq-link'&& navigator.platform ==='iPhone'|| navigator.platform ==='iPad')。

为了清楚起见,最好将附加括号的条件分组,即     ((param [1] ==='faq-link')&&(navigator.platform ==='iPhone')||(navigator.platform ==='iPad'))

答案 2 :(得分:0)

看看这个:

 else if(param[1] === 'faq-link' && navigator.platform === 'iPhone' || 'iPad' )
will allways return true because 'iPad' is true.

这样改变:

 else if(param[1] === 'faq-link' && navigator.platform === 'iPhone' || navigator.platform ==='iPad' )