猿问

loadsh 源码阅读 问题 001

以下为loadsh源码中的一段:
functionbaseCompareAscending(value,other){
if(value!==other){
varvalIsReflexive=value===value,
othIsReflexive=other===other;
if(value>other||!valIsReflexive||(typeofvalue=='undefined'&&othIsReflexive)){
return1;
}
if(valuereturn-1;
}
}
return0;
}
比较大小。
问题一,代码写法问题,为什么不写成下面代码这种形式,在我看来两种写法是等价的,但是下面的精简了一层{}
,上面的那个写法我没有看出其他的含义
functionbaseCompareAscending(value,other){
if(value===other)return0;
varvalIsReflexive=value===value,
othIsReflexive=other===other;
if(value>other||!valIsReflexive||(typeofvalue=='undefined'&&othIsReflexive)){
return1;
}
if(valuereturn-1;
}
}
问题2:
除了NaN的情况外,是否还存在value===value为false的情况?
翻过高山走不出你
浏览 330回答 2
2回答

慕标琳琳

如@limichange所述,后面一种写法没有完整覆盖所有情况,一个简单的例子是涉及对象的时候baseCompareAscending({},{})关于a===a//false的情况确实只有NaN一种可能,可以看看ECMA标准中关于严格比较的描述。在类型和值都相同的条件下只有NaN会返回false
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答