2016-08-13 26 views
1

我刚穿过一块其用在地方赋值语句JavaScript代码来的地方的逻辑&&或逻辑OR表达式将用于:的javascript:使用赋值语句,其中的条件表达式通常会

var geo; 

function getGeoLocation() { 
    try { 
     if (!! navigator.geolocation) { 
      return navigator.geolocation; 
     } else { 
      return undefined;   
     } 
    } catch(e) { 
     return undefined; 
    } 
} 


if (geo = getGeoLocation()) { 
// ^^^^^^^^^^^^^^^^^^^^^ this is the statement I am interested in 
    console.log('conditional expression was true/truthy'); 
} 

我的问题是,从if声明的角度来看,当评估
geo = getGeoLocation()时会返回什么?
特别是它是什么结果?这是什么类型?

  • 无论功能getGeoLocation()回来了?
    (其中的类型将是truthy/falsy)
  • 它是作业的“结果”吗?即是否分配了非空的东西?
    (在这种情况下,“结果”可能是布尔值,真/假?)
  • 还是别的?
+0

呀,用'地理位置返回()'会值被用来测试'if'条件。例如'if(a = false){console.log(“abc”)} undefined'但是if(a = true){console.log(“abc”)} VM402:1 abc' – tewathia

+0

“result “的分配是指定的值。也就是说赋值运算符返回赋值的值。这就是为什么'a = b = c =“test”'起作用的原因。 – nnnnnn

+0

只需阅读[赋值运算符的文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment),其中明确指出“赋值操作计算结果为分配的值“(换句话说,RHS)。 – 2016-08-13 04:37:49

回答

1
if (geo = getGeoLocation()) { 
    // ... 
} 

我的问题是,从if语句的角度来看,当 地理= getGeoLocation()评估正在返回什么?

下面是会发生什么时间步骤:

  • getGeoLocation()将执行第一
  • 赋值操作接下来会发生,在任何getGeolocation()收益将被存储在geo

    • 这将是undefinednavigator.geolocation(如果存在)。
  • geo将被评估(测试truthiness)作为 条件的if声明

代码相对应的是以下几点:

geo = getGeoLocation(); 
if (geo) { 
    // ... 
} 
+0

谢谢,你的声明'geo = getGeoLocation();如果(地理){// ...}'在我看来是一种有用的思考方式。这是我希望得到的答案,谢谢 –

+0

没问题,很乐意帮忙,如果我可以 – nem035

+2

我会推荐这样写,因为它在月份的轨道上更明显。想象一下有一些bug,看看代码并立即将其更改为==,因为这是更常见的模式 - 那么你已经引入了另一个bug:p –

1

如果导航成功,你得到一个地理定位对象,这是真的,如果失败,你可以在else部分看到,函数返回未定义,这是伪造的。

-1

它可能返回true或false,或者1或0。

通俗地讲,就是不为0或虚假评估为true的值,我们可以做这样的事情:

if (true) 
    always do this 
if (false) 
    never do this 

或者

// loop will break when v = 0 
var v = 10 
while (v) { 
    if (v) 
     do something... 
    v--; 
}   
+1

任何不是0,false,undefined或null的对象。 –

+0

与代码中的注释相反,while循环将永远不会结束。 – nnnnnn

+0

我想你的意思是“评估”而不是“返回”。无论如何,它不会“返回真或假”,它**评估**为真或假。 – 2016-08-13 04:33:51