2013-04-05 69 views
29

typeof (myVariable)typeof myVariable相比有什么区别?为什么“typeof”不需要括号?

这两个工作,但来自PHP,我不明白为什么这个函数可以使用括号或不。

+1

这不是一个函数。 – 2013-04-05 21:22:49

+1

要添加,它是一个类似于'+'或'-'的运算符https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof – 2013-04-05 21:23:25

+0

因为'typeof'是一个运算符,而不是一个函数。 – jmoerdyk 2013-04-05 21:23:30

回答

44

typeof关键字代表运营商Javascript编程。

typeof运营商在specification正确的定义是:

typeof[(]expression[)] ; 

这是利用typeof作为typeof(expression)typeof expression背后的原因。

即将到来为什么它已被实现,因此可能会让开发人员处理其代码中的可见性级别。因此,可以使用typeof使用干净的条件语句:

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

或者说明使用()的可读性的原因更复杂的表达式:

var 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` 
相关问题