【问题标题】:Why this code works? (bizarre syntax in javascript) [duplicate]为什么这段代码有效? (javascript中的奇怪语法)[重复]
【发布时间】:2017-08-15 14:35:15
【问题描述】:

我发现这行代码有效:

 for(let in [0,1,2]) {console.log('wtfjs');}

但不是这些:

 for(var in [0,1,2]) {console.log('js');}
for(const in [0,1,2]) {console.log('js');}

(在 Chrome、Firefox 甚至 Edge 上试试!)

我对此感到非常困惑。

找到另一个

for(let of [0,1,2]) {console.log(let);}

为什么这不起作用?

【问题讨论】:

  • 答案一定隐藏在specs的某处,但我找不到
  • @UlysseBN Section 11.6.2.1。 “letstatic 通过静态语义限制而不是词汇语法被视为保留关键字。”换句话说,letstatic 是上下文关键字。它们是关键字或变量名,具体取决于上下文。
  • 我明白为什么let in [] 有效。但是为什么let of [] 不...?知道这在现实世界的代码中是没有用的,我真的很好奇。

标签: javascript


【解决方案1】:

看起来 let 暗示了变量名“let”,而 var 和 const 并不暗示名称。您需要在那些不起作用的变量或 const 名称中。像这样:

 for(var x in [0,1,2]) {console.log('js');}
 for(const y in [0,1,2]) {console.log('js');}

【讨论】:

  • 为什么投反对票?
  • 你没有抓住重点。 OP 询问为什么第一个示例在没有变量名的情况下工作,而后两个实例没有
  • "let 隐含一个空变量名" — 它没有。 Let被视为变量名。您可以通过记录let 的值来测试它。任何关于为什么会这样的解释(即一个好的答案)都可能需要参考规范。
  • 感谢您的反馈。编辑了我的答案。
  • 我发现了另一个奇怪的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
相关资源
最近更新 更多