JavaScript添加布尔值

时间:2013-12-12 22:13:05

标签: javascript

console.log(true+true); //2
console.log(typeof(true+true)); //number
console.log(isNaN(true+true)); //false

为什么要将2个布尔类型加在一起产生一个数字?我有点明白,如果它们不相等(1/0(二进制?)),尝试对布尔类型执行算术会很尴尬,但我找不到这种逻辑背后的推理。

3 个答案:

答案 0 :(得分:12)

它的工作方式与此类似,因为它的工作方式就是如此。

EcmaScript标准指定除非其中一个参数是字符串,否则假定+运算符表示数字加法而不是字符串连接。明确提到转换为数值:

  

将添加操作的结果返回到ToNumber(lprim)和ToNumber(rprim)。

(其中lprimrprim分别是左手和右手参数的原始形式)

EcmaScript还明确指定了布尔值的To Number转换:

  

如果参数为true,则结果为1。如果参数为假,则结果为+0。

因此,true + true实际上意味着1 + 12

答案 1 :(得分:0)

Javascript是一种动态类型语言,因为您不必在开始时指定某些类型,例如bool xint i。当它看到一个无法真正完成的操作时,它会将操作数转换为它们需要的操作,以便它们可以对它们进行操作。这被称为类型强制。你不能添加布尔值,因此Javascript会将布尔值转换为它可以添加的东西,比如字符串或数字。在这种情况下,将它转换为数字是有意义的,因为1通常用于表示true,0表示false。因此,Javascript会将true转换为1,然后将它们添加到一起

答案 2 :(得分:0)

Javascript是松散类型的,它会自动将事物转换为其他东西以适应这种情况。这就是为什么你可以var x而不将其定义为intbool

http://msdn.microsoft.com/en-us/library/6974wx4d(v=vs.94).aspx