在Javascript应用过程中会遇到各式各样的比较,今天给大家整理了三种情况,一起来学习下。
1.两个对象的比较
Javascript的比较中参杂了一些比较奇怪的特性,我们来看一些比较简单的比较。
// 原始值的比较> var a = 12undefined> var b = 12undefined> a == btrue> a === btrue// 对象的比较> var c = []undefined> var d = []undefined> c == dfalse> c === dfalse
由上面的结果可以看出比较两个原始值跟比较对象规则似乎有点不同,比较两个对象值的话即便它们的值相同,但是最后的结果是不一样的。比较两个对象,应该比较的是两个对象的引用。
如果我们这样操作:
> var m = {}undefined> n = m{}> n === mtrue
表示两个变量都指向同一个对象,所以它们就是相同的了。
2.不同类型的比较
还有下面这个比较特殊的情况
> 12 == "12"true> null == undefinedtrue> undefined == falsefalse> null == falsefalse> null === undefinedfalse
为什么整型能够等于字符串?这是由于==(等于而非全等)并不比较类型,它比较之前会将需要比较的值进行类型转换,这里的话会将字符串转换成数值类型然后进行比较。为什么这么肯定? 我们做一下实验。
> 1 + 23> 1 + "2"'12'> 2 < "12"true> "2" < "12"false
从上面例子可以看出,数值2确实是比字符串12小的。如果比较之前是数值转换成字符串那结果应该是"2" > "12"才对。
还不相信?我再举个例子。
> "12d" > 12false> "12d" < 12false> "12d" == 12false> "12" < "12d"true
这是为什么呢?如果是将12转换成字符串的话,那12d应该是大于12才对吧。为什么怎么比较都是false?我估计是由于下面这个特殊的家伙。
> NaN < 1false> NaN > 1false
NaN无论跟什么进行比较,都会返回false。包括它自己。所以要判断一个变量是不是NaN最好的办法就是x != x如果返回的是true则表明x是NaN。那么这里应该就是当12d要转换成数值类型的时候由于带有特殊的字符,最后变成了NaN了,跟数值类型无论怎么比较结果都是false。
对于数字与字符串操作符来说,加号运算符跟比较运算符的行为有所不同。加号运算符更偏爱字符串,如果其中一个操作数是字符串的话则会转换成字符串。而比较运算符则比较偏爱数字,只有在两个数字都为字符串的时候才会进行字符串比较。
至于上面的null 跟 undefined。。。。。我暂时也不知道怎么解释它们的行为。我也只能姑且记住。因为它们比较特殊。
新闻热点
疑难解答
图片精选