Javascript 为什么';onhashchange';在(窗口)工作?
使用Javascript 为什么';onhashchange';在(窗口)工作?,javascript,Javascript,使用in()工作并不奇怪,因为new(XMLHTTPRequest)或typeof(x)是此构造的其他示例,但不必将字符串与分隔在一起 这是否符合ECMAScript规范?它在Chrome和FF中工作,还没有测试IE。从我可以看出,在这个特定实例中,是否将窗口括在括号中没有区别。无论哪种方式,它都会在窗口对象上检查此成员 如果使用空格,可能会更容易混淆: 'onhashchange'in(window) 同 'onhashchange' in (window) 中的不是一个函数,但是当您删除
in()
工作并不奇怪,因为new(XMLHTTPRequest)
或typeof(x)
是此构造的其他示例,但不必将字符串与分隔在一起
这是否符合ECMAScript规范?它在Chrome和FF中工作,还没有测试IE。从我可以看出,在这个特定实例中,是否将窗口
括在括号中没有区别。无论哪种方式,它都会在窗口
对象上检查此成员
如果使用空格,可能会更容易混淆:
'onhashchange'in(window)
同
'onhashchange' in (window)
中的不是一个函数,但是当您删除空格时,我可以看到您是如何读取它的。将窗口
包装在括号中的一个优点是,您可以缩小代码:
'onhashchange' in window
如果没有括号,你就无法做到这一点。我不确定这个符号是否让你感到困惑(也许in()
是一种方法?),但是in
是JS中很少有人正确理解的元素之一(直到最近我才真正理解它)。这是一个简化版本,显示了
中的功能:
'onhashchange'in(window)
更令人困惑的是,您可以在for()
循环中使用in
,就好像它(in
)是迭代器一样。我对
循环的思考方式如下:
var foo = {
'bar':1,
'barbar':2
}
console.log('bar' in foo); //true
console.log('baz' in foo); //false
换言之,循环将继续,直到
中的条件失败,这将在成员用完时发生。“
是字符串结尾的标记,因此一对'
在语义上是明确的,您不需要在字符串结束后使用空格,lexer就可以知道它已经到达了字符串的结尾
另一种说法是,这与'Hello'+'world'
的工作原理相同
此外,
中的是一个关键字,而不是函数。您似乎认为()
是“函数调用操作符”,但在本例中,它只是一个消除歧义的括号
这就像是问“为什么1+(2)
起作用?”+
不会仅仅因为你用一个paren跟随它而成为一个函数,类似地,以下内容也会起作用:
for (exp1; condition; exp2) {
/* statements */
}
for (condition) {
/* statements */
}
Javascript的空白规则很脆弱。我无法理解你的问题,我可以再澄清一下吗。这与typeof“foo”是一样的。
V.s.typeof(“foo”)
类型的
和
中的
是运算符,不需要parenthesis@gdoron我认为paren存在的原因与应该使用分号的原因相同——以防代码被缩小或压缩。typeof运算符以以下任一方式使用:typeof operand typeof(operand)
无论如何,它就像return(“foo”)
而不是返回“foo”
或if((x)| |(y))
它们是多余的,只会使事情变得更复杂。“恐怕这与小型化的事情无关。”格多龙我想你误解了我。除非包含用于区分in
运算符和窗口
对象的参数,否则不能删除空格。如果没有paren,删除空白将导致窗口中的“onhashchange”,浏览器将无法理解该语句。它将引发一条意外标识符
消息。如果将窗口
换行,则情况并非如此。@JonathanSampson:删除一个空格字符的尝试导致了两个额外字符<代码>n中的x
比n中的x
function foo(){}
foo
();