【问题标题】:Why does "typeof" not need parentheses? [closed]为什么“typeof”不需要括号? [关闭]
【发布时间】:2013-03-28 10:50:13
【问题描述】:

typeof (myVariable)typeof myVariable 相比有什么区别吗?

两者都有效,但来自 PHP,我不明白为什么这个函数可以使用括号。

【问题讨论】:

  • 因为typeof是一个操作符,而不是一个函数。
  • 这是一个真实的问题,而不是一个不真实的问题。
  • 为什么关闭?问题非常重要……哪一个是正确的?是否已弃用或可用于覆盖更多向后兼容的浏览器?

标签: javascript typeof


【解决方案1】:

typeof 关键字代表Javascript 编程中的运算符

specificationtypeof 运算符的正确定义是:

typeof[(]expression[)] ;

这就是将typeof 用作typeof(expression)typeof expression 的原因。

为什么这样实现它可能是为了让开发人员处理其代码中的可见性级别。因此,可以使用 typeof 使用干净的条件语句:

if ( typeof myVar === 'undefined' )
  // ...
;

或者使用grouping operator 定义更复杂的表达式:

const isTrue = (typeof (myVar = anotherVar) !== 'undefined') && (myVar === true);

编辑:

在某些情况下,在typeof 运算符中使用括号可以使编写的代码不易产生歧义。

以下面的表达式为例,其中typeof 运算符不带括号。 typeof 会返回空字符串文字和数字之间的连接结果的类型,还是字符串文字的类型?

typeof "" + 42

查看上述运算符的定义和precedence of the operators typeof and +,看来前面的表达式相当于:

typeof("") + 42 // Returns the string `string42`

在这种情况下,在typeof 中使用括号会使您想要表达的内容更加清晰:

typeof("" + 42) // Returns the string `string`

【讨论】:

  • 只是挑剔一个近 6 岁的答案:我认为 var isTrue 缺少括号。你有三个左括号和四个右括号。这让我想到了一个要点 - 有括号不会使代码可读。在某些情况下,多余的括号只会让事情变得更难破译,
  • 感谢@JerriKangasniemi 指出错字。是的,我同意你关于可读性的说法,我只是做了一个编辑。事实上,这种实现背后的真正原因是允许在 typeof 运算符的范围内使用复杂的表达式(例如赋值或使用三元运算符),这通常会使代码很难被人类阅读。
  • 也许应该添加(typeof "") + 42 // Returns the string 'string42'?在没有额外混淆的情况下同样明确。
  • typeof 被指定为typeof UnaryExpression。 MSDN 链接已过时;这不是“正确”的规范。
  • @SebastianSimon 更新了链接,谢谢!
猜你喜欢
  • 2014-08-09
  • 2019-10-27
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2012-08-03
相关资源
最近更新 更多