的javascript:使用赋值语句,其中的条件表达式通常会
我刚穿过一块其用在地方赋值语句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) - 它是作业的“结果”吗?即是否分配了非空的东西?
(在这种情况下,“结果”可能是布尔值,真/假?) - 还是别的?
if (geo = getGeoLocation()) {
// ...
}
我的问题是,从if语句的角度来看,当 地理= getGeoLocation()评估正在返回什么?
下面是会发生什么时间步骤:
-
getGeoLocation()
将执行第一 -
赋值操作接下来会发生,在任何
getGeolocation()
收益将被存储在geo
- 这将是
undefined
或navigator.geolocation
(如果存在)。
- 这将是
-
geo
将被评估(测试truthiness)作为 条件的if
声明
代码相对应的是以下几点:
geo = getGeoLocation();
if (geo) {
// ...
}
谢谢,你的声明'geo = getGeoLocation();如果(地理){// ...}'在我看来是一种有用的思考方式。这是我希望得到的答案,谢谢 –
没问题,很乐意帮忙,如果我可以 – nem035
我会推荐这样写,因为它在月份的轨道上更明显。想象一下有一些bug,看看代码并立即将其更改为==,因为这是更常见的模式 - 那么你已经引入了另一个bug:p –
如果导航成功,你得到一个地理定位对象,这是真的,如果失败,你可以在else部分看到,函数返回未定义,这是伪造的。
它可能返回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--;
}
任何不是0,false,undefined或null的对象。 –
与代码中的注释相反,while循环将永远不会结束。 – nnnnnn
我想你的意思是“评估”而不是“返回”。无论如何,它不会“返回真或假”,它**评估**为真或假。 – 2016-08-13 04:33:51
呀,用'地理位置返回()'会值被用来测试'if'条件。例如'if(a = false){console.log(“abc”)} undefined'但是if(a = true){console.log(“abc”)} VM402:1 abc' – tewathia
“result “的分配是指定的值。也就是说赋值运算符返回赋值的值。这就是为什么'a = b = c =“test”'起作用的原因。 – nnnnnn
只需阅读[赋值运算符的文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment),其中明确指出“赋值操作计算结果为分配的值“(换句话说,RHS)。 – 2016-08-13 04:37:49