javascript - “价值!==价值”什么时候是真的?
问题描述
我正在研究对象相等测试函数,并在 Lodash 的“isEqual”函数中遇到了这段代码:
https://bit.dev/lodash/lodash/internal/_base-is-equal/~code
function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
return value !== value && other !== other;
}
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
TLDR:什么时候会return value !== value && other !== other;
返回 true?
难倒我的部分是第二个条件及其返回。显然,第一个条件捕获了简单的严格相等情况。但是,看看下一个测试,我做了以下观察(假设?):
value == null
仅适用于“空”和“未定义”- “isObjectLike”子句消除了任何不是原始或函数的东西
value
那么,如果and的唯一值other
是原语、未定义、null 或函数,那么哪些值可以满足true
返回条件?在 Lodash 中看到这段代码赋予了它可信度,所以我也“假设”它是合法的(“假设”!......是的,我知道......)。
解决方案
推荐阅读
- ios - 带有常规文本的 SwiftUI 低不透明度按钮
- javascript - 如何使用 Chart.js 将所有相关数据显示到同一图表上的一个特定项目?
- windows - Poco::DirectoryWatcher 不处理网络连接丢失
- r - R - 选择至少 x 行高于某个数字的列
- css - 如何更改 Google 地图中的线路交通颜色 - Angular
- flutter - 如何创建 Flutter 应用并从信标设备接收通知?
- svelte - 当函数返回的值在模板上发生变化时,SVELTE 调用 await 函数
- java - 带有插件 RobotPublisher 的 Jenkinsfile 导致 java.lang.NullPointerException
- python - 在 python 的 skechers 中访问被拒绝
- django - 用一些代码(比如 Msg007)替换响应输出消息并在我们在 django 中点击 api 时翻译它们