为什么...优先失败但是...抛出异常?

ᆼᆺᆼ*_*ᆼᆺᆼ 8 javascript foreach ecmascript-6

为什么会这样

for (let e in null) void e
Run Code Online (Sandbox Code Playgroud)

优雅地失败,但那

for (let e of null) void e
Run Code Online (Sandbox Code Playgroud)

抛出一个TypeError?这不会导致不一致吗?

Dan*_*ite 6

for...of仅适用于可迭代对象(即实现可迭代协议的对象),null这些对象不是其中之一.而for...in在所有的值作品.

  • @hindmost:No.原始值(布尔值,数字,字符串,未定义,空,符号)是*not*对象.http://www.ecma-international.org/ecma-262/6.0/index.html#sec-ecmascript-language-types (6认同)
  • 是的,但`typeof null`是`object` - 显然是胡说八道.`for ...的抛出异常的行为(因为null不可迭代)比`for`明显声称`null`是一个没有原型链的空`对象'要优雅得多.顺便说一下,查看Doug Crockford关于"null"作为"typeof operator"对象的不幸分类的经典着作"附录A:Aweful Parts",第103页. (3认同)
  • @PeterVarga:JavaScript对具有等效对象的原始类型/值执行[autoboxing](https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming)#Autoboxing). (2认同)