2011-12-19 43 views
16

JavaScript是不严格的类型语言如Java,例如。JavaScript的类型转换:(真&& 1)VS(真| | 1)

正如我们所知,这对语境依赖性转换结果的值:

"2" + "3"导致"23"

"2" * "3"结果6

这是理解相当明确和确定。

我只是尝试以下表达式和糊涂了:

true && 1结果1
true || 1结果true

为什么第一次给数和第二给布尔?

考虑到JavaScript转换规则,我预计在两种情况下都会得到boolean值,这是由于boolean表达式的上下文。

回答

8

检查Douglas Crockford's site,它说:

的& &操作通常被称为逻辑和。它也可以叫做 后卫。如果第一个操作数为假,空,未定义,“”(空 字符串)或数字0,则返回第一个操作数。否则, 它返回第二个操作数。这提供了编写 空检查的便捷方式:

var value = p && p.name; /* The name value will only be retrieved from 
p if p has a value, avoiding an error. */ 

的||运算符通常是 ,称为逻辑或。它也可以被称为默认。如果第一个操作数 为false,null,未定义,“”(空字符串)或数字0, ,则返回第二个操作数。否则,它返回第一个 操作数。这提供了一种方便的方式来指定默认值:

value = v || 10; /* Use the value of v, but if v doesn't have a value, 
use 10 instead. */ 
+0

感谢你的解释 - 这是关于警卫和默认的有趣点 – sergionni 2011-12-19 10:42:07

+0

不客气。总而言之,我会建议阅读道格拉斯的JavaScript页面而不是规范。在我看来,这很容易理解。 http://javascript.crockford.com/ – 2011-12-19 10:48:24

+0

很好的解释!我希望我能给你+3。 – 2013-05-11 18:41:57

9

quote MDC;

&&;如果可以将其转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,如果两个操作数都为真,则&&返回真;否则,返回false。
||;如果可以将其转换为true,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,||如果任一操作数为真,则返回true;如果两者都是假的,则返回false。

因此,在第一示例中,被返回1因为expr1不能被转换为false。

在第二示例中,true可以转换为真实的,所以它的返回。

+0

非常感谢,其实你提醒我,Mozilla的资源,如JavaScript文件 – sergionni 2011-12-19 10:44:11

0

你可以做其他的东西太多,如:

var myVar = Math.random() > 0.5; 

myVar && doFunc(); 

这是一样的

if(myVar) { 
    doFunc(); 
} 

||基本意思是“如果第一件事情是假的,到第二个”

&&基本意思是“如果第一件事情是真实的,转到第二个”

这就是为什么你看到这样的事情在函数的顶部:

function myFunction(options) { 
    options = options || {}; 
} 

这意味着:如果选择是falsey,使其{}

9

这有什么好做类型转换。

||返回第一个真值操作数。 1 || true会给你1

&&返回第一个falsy操作数,或者第二个操作数,如果两者都是truthy。

见58页的ECMAScript specification

+0

非常有价值谢谢你,从来不知道关于“开始到最后”的方针 – sergionni 2011-12-19 10:35:42

0

您正在对使用逻辑评估(其中&,||)执行的操作(*/+操作符会执行此操作)进行混淆。

+0

能不会得到你的答案 – sergionni 2011-12-19 10:46:15

相关问题