typeof('apple')与typeof'apple'背后的推理

时间:2014-12-17 20:22:22

标签: javascript

只是看着我常常掩饰的区域,并注意到这一点。

typeof('apple'); //"string"

typeof 'apple'; //"string"

好的,首先,第二个例子是如何工作的?我得到的第一个是函数和参数。第二个是恰好与函数同名的运算符吗?那是怎么回事?

第二个问题:为什么这样做?我可以在不使用()的情况下定义我的函数吗?

2 个答案:

答案 0 :(得分:3)

您的问题基于typeof是函数的假设。它不是! typeofunary operator,就像-+~!一样。

  

那里有什么事?

此表达式

typeof('apple')

不是函数调用,它是typeof运算符,后跟括号表达式。这与撰写!(foo)而非!foo相同。

  

为什么这样?

如果您看到类似的代码,要么使某些优先级更清晰,要么编写代码的人不会更清楚。

  

我可以在不使用()的情况下定义我的功能吗?

定义函数和调用函数是两回事。我假设你的意思是后者,答案是 no 。但是,如果您不传递参数,则可以在没有()的情况下调用构造函数。即new Foonew Foo()相同。

答案 1 :(得分:0)

您可以阅读MDN

typeof 运算符返回一个字符串,指示未评估的操作数的类型。

  

typeof运算符后跟其操作数:

     

操作数类型

// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof always return a string
typeof String("abc") === 'string'; // but never use this form!