MDN" Object.is"替代提案

时间:2014-01-31 14:31:45

标签: javascript object methods ecmascript-6

我看过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”何时可以成立?

感谢您的关注。

2 个答案:

答案 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()表示它们是相同的