javascript:使用赋值语句,其中条件表达式通常是

时间:2016-08-13 03:00:27

标签: javascript

我刚刚遇到一段javascript代码,该代码在使用逻辑z或逻辑&&表达式的地方使用了赋值语句:

OR

我的问题是,从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()返回什么?
    (其中类型将是真或假)
  • 是"结果"作业?即是否指定了非空的东西?
    (在这种情况下,"结果"可能是布尔值,真/假?)
  • 或其他什么?

3 个答案:

答案 0 :(得分:1)

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

我的问题是,从if语句的角度来看,什么是返回时   是否评估了geo = getGeoLocation()?

以下是将要发生的事情的时间顺序:

  • getGeoLocation()将首先执行
  • 接下来会发生分配操作,其中getGeolocation()返回的内容将存储在geo

    • 如果相同,则为undefinednavigator.geolocation
  • 然后将对
  • geo进行评估(测试truthiness) 条件到if陈述

该代码的等价物如下:

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

答案 1 :(得分:1)

如果导航器成功,你会得到一个地理位置对象,这是真实的,如果它失败你可以在else部分看到,该函数返回undefined,这是假的。

答案 2 :(得分:-1)

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

简单地说,任何非0或false的值都为true,我们可以这样做:

validates :body, presence: true

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