2015-05-26 133 views
0

有各种函数返回“未定义”的例子,但我无法找到一个原因,为什么我的JS条件(我简化为一个简单的IF ... ELSE语句)是在控制台中返回“undefined”。Javascript conditoinal返回“undefined”

var blue = "color"; 
var green = "color"; 


if (blue = green) { 
    console.log("success"); 
} 
else { 
    console.log("fail"); 
} 

有人能解释什么是undefined?提前致谢。

+0

中的console.log()返回的是'undefined' ,而不是代码本身。 – dandavis

回答

2

你的if包含一个赋值,而不是一个相等性检查。

替换:

blue = green 

有了:

blue == green 

或最好:

blue === green 

由于两个预计将字符串,你可以(也应该)使用全等检查(===),那里。

这“三重平等”检查,如果两个类型和值相等,相比于只为==值:

alert("1 === '1': " + (1 === '1')); 
 
alert("1 == '1': " + (1 == '1'));


现在,如果你运行该代码一个浏览器的控制台,实际的代码不会返回一个值,因此,它会输出undefined,除了console.log()的结果:

enter image description here

+0

永远不要使用double等于:http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons –

+1

永远不要说_“从不”_。如果你知道你在比较什么类型,并且熟悉JS的类型转换,那么'=='确实不是那么糟糕。 – Cerbrus

+0

真的吗? 2降价?这个答案有什么错误? – Cerbrus

1

您当前的if语句正在执行将蓝色设置为等于绿色的操作。单个等号不会真正检查真值。

为了在这里运行布尔检查,您需要使用三重等号运算符。

if (blue === green) 

如果您在控制台中运行这个,这里是它的外观:

enter image description here

因为你的if语句实际上并不返回任何东西(而不是,它只是记录到控制台)您将收到undefined作为输出。

+0

你可能想要解释_why_。 – Cerbrus

+0

这仍然导致未定义。 –

+0

我刚刚在控制台中测试了这个。 if语句在与triple-equals一起运行时返回'success'。我是否遗漏了未发布的OP代码的一些重要部分? –

1

您在控制台中看到未定义的原因是因为这是执行的代码完成的。最后执行的语句是if else子句,它没有返回值,因此undefined

需要注意的第二个重要方面是,您在if语句内部进行了赋值,并且作为该赋值的结果,您总是要以if("color")结尾,这将始终为真,并且作为结果console.log将始终发生。

这导致控制台看上去就像

"success" 
undefined 

因为有人downvoted这显然是不熟悉的执行控制台代码

enter image description here