Redux 源码中的对象键值的判空操作

#1
  var reducerKeys = Object.keys(reducers)
  var finalReducers = {}
  for (var i = 0; i < reducerKeys.length; i++) {
    var key = reducerKeys[i]

    if (process.env.NODE_ENV !== 'production') {
      if (typeof reducers[key] === 'undefined') {
        warning(`No reducer provided for key "${key}"`)
      }
    }

    if (typeof reducers[key] === 'function') {
      finalReducers[key] = reducers[key]
    }
  }

reducerKeys 的值是从 reducers 对象中获取的所有可枚举对象的键数组(不包括原型链上的键)。那么 for 循环中的 所有key 在reducerKeys 中都是必然存在的,那为什么还需要存在以下这一步判空操作?

      if (typeof reducers[key] === 'undefined') {
        warning(`No reducer provided for key "${key}"`)
      }

最近看到很多大项目代码中都有类似这些看起来逻辑比较严谨的判空语句,多写这一步或许能够保证正确性,不过看起来肯定不会触发这个if条件,求教。

#2

顶一顶 有没有知道的

#3
obj = {a: undefined}
Object.keys(obj) // ["a"]

undefined 是可以手动设置的