在Javascript中为几乎相同的输入获取不同的typeof

时间:2018-05-21 13:49:35

标签: javascript

我输入几乎相同的输入,但以下2种计算的类型不同,有人可以指出原因吗?



<html>
<head></head>
<body>

<script type="text/javascript">

console.log(typeof 1/0);
console.log(typeof (1/0));

</script>

</body>
</html> 
&#13;
&#13;
&#13;

我相信在这两种情况下答案都是1/0 =&gt; &#39; Infinity&#39;,为什么我会得到不同的结果。

2 个答案:

答案 0 :(得分:5)

JavaScript运算符优先级:MDN documentation

如您所见,typeof的优先级别为16,而除法的优先级别为14.这意味着,在没有括号的情况下,将首先评估typeof。相关的运算符优先级为:

  • 分组:20
  • Typeof:16
  • 分部:14

我们将您的表达式评估为:

typeof 1/0   --> "number"/0      --> "NaN"
typeof (1/0) --> typeof Infinity --> "number"

在第一行,typeof具有更高的优先级,因此我们首先评估typeof 1。这评估为“数字”,不能除以零,所以我们得到NaN。

在第二行,首先评估(1/0),因为Grouping具有最高优先级(20)。它的计算结果为NaN,其类型为“number”。

答案 1 :(得分:1)

将第一个语句看作(类型1)/ 0