console.log(true+true); //2
console.log(typeof(true+true)); //number
console.log(isNaN(true+true)); //false
为什么要将2个布尔类型加在一起产生一个数字?我有点明白,如果它们不相等(1/0(二进制?)),尝试对布尔类型执行算术会很尴尬,但我找不到这种逻辑背后的推理。
答案 0 :(得分:12)
它的工作方式与此类似,因为它的工作方式就是如此。
EcmaScript标准指定除非其中一个参数是字符串,否则假定+
运算符表示数字加法而不是字符串连接。明确提到转换为数值:
将添加操作的结果返回到ToNumber(lprim)和ToNumber(rprim)。
(其中lprim
和rprim
分别是左手和右手参数的原始形式)
EcmaScript还明确指定了布尔值的To Number
转换:
如果参数为true,则结果为1。如果参数为假,则结果为+0。
因此,true + true
实际上意味着1 + 1
或2
。
答案 1 :(得分:0)
Javascript是一种动态类型语言,因为您不必在开始时指定某些类型,例如bool x
或int i
。当它看到一个无法真正完成的操作时,它会将操作数转换为它们需要的操作,以便它们可以对它们进行操作。这被称为类型强制。你不能添加布尔值,因此Javascript会将布尔值转换为它可以添加的东西,比如字符串或数字。在这种情况下,将它转换为数字是有意义的,因为1通常用于表示true,0表示false。因此,Javascript会将true
转换为1
,然后将它们添加到一起
答案 2 :(得分:0)
Javascript是松散类型的,它会自动将事物转换为其他东西以适应这种情况。这就是为什么你可以var x
而不将其定义为int
或bool
http://msdn.microsoft.com/en-us/library/6974wx4d(v=vs.94).aspx