只是四处闲逛,看看我通常忽略的区域,并注意到了这一点。
typeof('apple'); //"string"
typeof 'apple'; //"string"
好的,首先,第二个示例如何工作?我得到第一个是函数和参数。第二个是恰好与函数同名的运算符吗?这是怎么回事?
第二个问题:为什么要这样做?我可以在不使用 (( 的情况下定义我的函数吗?
你的问题是基于typeof
是一个函数的假设。不是! typeof
是一个一元运算符,就像-
、+
、~
或!
一样。
这是怎么回事?
此表达式
typeof('apple')
不是函数调用,它是后跟括号表达式的typeof
运算符。它与写!(foo)
而不是!foo
相同。
如果你看到这样的代码,要么是为什么要这样做?
为了让一些优先级更清晰,要么是编写代码的人不知道更好。
我可以在不使用 (( 的情况下定义我的函数吗?
定义函数和调用函数是两回事。我假设你的意思是后者,答案是否定的。但是,如果不传递参数,则可以在不()
的情况下调用构造函数。即 new Foo
与 new Foo()
相同。
你可以阅读 MDN
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!