只是看着我常常掩饰的区域,并注意到这一点。
typeof('apple'); //"string"
typeof 'apple'; //"string"
好的,首先,第二个例子是如何工作的?我得到的第一个是函数和参数。第二个是恰好与函数同名的运算符吗?那是怎么回事?
第二个问题:为什么这样做?我可以在不使用()的情况下定义我的函数吗?
答案 0 :(得分:3)
您的问题基于typeof
是函数的假设。它不是! typeof
是unary operator,就像-
,+
,~
或!
一样。
那里有什么事?
此表达式
typeof('apple')
不是函数调用,它是typeof
运算符,后跟括号表达式。这与撰写!(foo)
而非!foo
相同。
为什么这样?
如果您看到类似的代码,要么使某些优先级更清晰,要么编写代码的人不会更清楚。
我可以在不使用()的情况下定义我的功能吗?
定义函数和调用函数是两回事。我假设你的意思是后者,答案是 no 。但是,如果您不传递参数,则可以在没有()
的情况下调用构造函数。即new Foo
与new 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!