2015-02-09 91 views
0

再一次,这将是一个新手问题,即时通讯只是试图清楚我的头如何JavaScript解释布尔表达式。= vs ===布尔表达式的运算符

好了,所以说,我有以下的代码位:

var boolean = true; 
while(boolean){ 
boolean === false; 
}; 

这进入一个无限循环,由于使用相同===运算符的。这是因为JavaScript在使用简写表达式while(布尔值)时将JavaScript布尔表达式“true”存储为数字“1”。那么while(boolean)实际解释为while(boolean === 1)而不是while(boolean === true)?

+1

@Izzy:否,在这种情况下,混乱是'='和''===(和之间其他事情)。 – 2015-02-09 11:38:17

回答

0

=是赋值运算符。写

var bool = false; 

意味着“设置名为‘布尔’为‘假’变”

虽然===是全等运算符。写作

bool === false; 

检查变量'bool'是否包含'false'的确切值。它的意思是“变量'bool'的值是否为'false'?”

它将返回一个布尔值:如果布尔值保留为false,则返回true,否则返回false。在这种情况下,它返回true。

它会进入无限循环,因为'bool'永远不会更改值。将其设置为true时,使用=

bool = true; 
4

这是因为JavaScript存储布尔表达式“真”作为数字“1”,同时使用的简写表达,而(布尔值)。

所以是同时(布尔)实际上解释为,而(布尔=== 1),而不是同时(布尔===真)?

持续循环,因为你在做什么在循环中改变你的boolean变量的值号。该行

boolean === false; 

...没有效果;你正在做一个比较而不是将它的结果存储在任何地方。

您似乎有====困惑。他们做了完全不同的事情。这里有一个破败:

  • =赋值运算符。这是你用来分配值的东西。 boolean = true;的值true分配给变量boolean

  • ===严格平等运算符。它用于查看两件事是否严格相等(“严格”=“没有类型强制”)。因此a === b评估true如果ab包含具有相同类型的值是等价的。

  • ==松散平等运算符。它用于查看两件事情是否松散相等(“宽松”=“使用类型强制”)。因此,a == b将评估true如果a === b将为真如果ab有不同的类型,但类型强制可以将一个或另一个转换为其他类型。 (对于这个规则是复杂的,但例如"" == 0评估true因为""胁迫到0。)