React-Redux shallowEqual方法是不是错了?

React Redux源码中(5.0.1),shallowEqual.js文件的代码看着很奇怪,是不是代码错误?还是我理解错误?

const hasOwn = Object.prototype.hasOwnProperty

export default function shallowEqual(a, b) {
  if (a === b) return true

  let countA = 0
  let countB = 0
  
  for (let key in a) {
    if (hasOwn.call(a, key) && a[key] !== b[key]) return false
    countA++ // 这里是不是应该检查ownProperty以后,再增加?
  }

  for (let key in b) {
    if (hasOwn.call(b, key)) countB++
  }

  return countA === countB
}

疑问点看代码里面的注释,这样子会造成有从原型继承的属性是,永远是false

Object.prototype.bar = "bar";
var a = { foo: 1 }; var b = { foo: 1 };
shallowEqual(a, b); // 永远是fales

求解

阅读 7.3k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏