【问题标题】:Why is "typeof" the same as "typeof()"?为什么“typeof”与“typeof()”相同?
【发布时间】:2023-04-08 00:54:01
【问题描述】:

我正在学习JavaScript,我在代码中看到使用typeoftypeof()是一样的,例如:

两种情况下的结果都是数字:

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

【问题讨论】:

标签: javascript


【解决方案1】:

typeof 根据ES5 spec 是一元运算符——例如,与voiddelete 相同。使用分组 () 包装其表达式只是为了方便(并且 - 理论上 - 覆盖默认优先级),但绝不会将其视为函数调用。

【讨论】:

  • 谢谢,因此 typeof 是一元运算符。
  • 例如 C 和 C++ 中的一元运算符 sizeof。
【解决方案2】:

因为“typeof”是一个运算符(不是函数,也不是对象),而运算符可以用在带括号的表达式中:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.3

【讨论】:

    【解决方案3】:

    typeof 是一个运算符,就像 +、-、%、&& 等一样。它不是方法,“1”不是传递的参数,不需要括号。但是它会接受括号,因为它们只是指定了操作的顺序,就像 (1) + (2) 是可以接受的,即使括号不是必需的。所以你给出的例子在这两种情况下都是可以接受的。

    【讨论】:

      【解决方案4】:

      typeof 运算符不是函数。您可以用括号括住操作数,使表达式看起来像一个函数调用,但括号将仅充当分组运算符(在默默无闻的啄食顺序中仅次于逗号运算符!)。事实上,您可以使用各种标点符号来装饰操作数,而不会影响操作符。

      typeof (2) //"number"
      typeof(2) //"number"
      typeof ("a", 3) //"number"
      typeof (1 + 1) //"number"
      

      【讨论】:

      • 不太清楚你想用你的第三个例子展示什么。使用typeof ("a', 3),可以得到"a", 3 表达式结果类型的描述——这就是3,因为逗号运算符就是这样工作的。 )
      猜你喜欢
      • 1970-01-01
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2011-05-22
      • 2018-10-08
      • 1970-01-01
      相关资源
      最近更新 更多