我看过the MDN page on the "Object.is" method。 它为不提供此方法的浏览器提供了替代代码:
if (!Object.is) {
Object.is = function(v1, v2) {
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
if (v1 !== v1) {
return v2 !== v2;
}
return v1 === v2;
};
}
问题很简单:第二个“if”何时可以成立?
感谢您的关注。
答案 0 :(得分:4)
有点写在the same article:
根据===,这也不相同 运营商。 ===运算符(以及==运算符)处理 数字值-0和+0相等, 它将Number.NaN视为不相等 等于NaN 。
逻辑是NaN !== NaN
是!==
运算符在同一变量上返回true
的唯一情况,因此它必须与NaN
进行比较。然后对v2
执行相同的检查,并根据结果返回true:如果v2
比较为true
,那么NaN与NaN相比,则返回{{1如果没有,则返回true
,因为NaN永远不会与NaN 相同。
答案 1 :(得分:0)
请注意,我们只有1个NaN:
performSearchAction$: Observable<Action> = createEffect(
() =>
this.actions$.pipe(
ofType(actions.searchAction),
switchMap(data =>
this.apiService.getSearch(data).pipe(
tap(x => console.log('searchResponseData', x)),
map(searchResponseData => actions.searchSuccessAction(searchResponseData)),
catchError(error => of(actions.searchFailureAction(error)))
)
)
),
{ dispatch: true, resubscribeOnError: false } // dispatch: true
所以有两个可区分的值,但是Object.is()表示它们是相同的