两者语义上不同,规范里面关于 for in 语句(Annotated ES5)第 3 条专门把 null 和 undefined 先判断了一次,直接不报错返回。没有这一条,就会执行下一条里面 toObject(experValue) ,遇到 null 和 undefined 就会报 TypeError ,变得和 in 运算符行为一致。 目的就是避免歧义。