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

Dea*_*ool 0 javascript

我输入几乎相同的输入,但是以下2种计算的类型是不同的,有人可以指出为什么?

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

<script type="text/javascript">

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

</script>

</body>
</html> 
Run Code Online (Sandbox Code Playgroud)

我相信在这两种情况下答案都是1/0 =>'Infinity',所以为什么我会得到不同的结果.

Amy*_*Amy 5

JavaScript运算符优先级: MDN文档

如您所见,优先级为typeof16,而除法的优先级为14.这意味着,在没有括号的情况下,typeof将首先计算.相关的运营商优先级是:

  • 分组:20
  • 类型:16
  • 师:14

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

typeof 1/0   --> "number"/0      --> "NaN"
typeof (1/0) --> typeof Infinity --> "number"
Run Code Online (Sandbox Code Playgroud)

在第一行,typeof有一个更高的优先级,所以我们typeof 1先评估.这评估为"数字",不能除以零,所以我们得到NaN.

在第二行,(1/0)首先进行评估,因为分组具有最高优先级(20).它评估为NaN,其类型为"number".