在Javascript应用过程中会遇到各式各样的比较,今天给大家整理了三种情况,一起来学习下。
1.两个对象的比较
Javascript的比较中参杂了一些比较奇怪的特性,我们来看一些比较简单的比较。
// 原始值的比较 > var a = 12 undefined > var b = 12 undefined > a == b true > a === b true // 对象的比较 > var c = [] undefined > var d = [] undefined > c == d false > c === d false
由上面的结果可以看出比较两个原始值跟比较对象规则似乎有点不同,比较两个对象值的话即便它们的值相同,但是最后的结果是不一样的。比较两个对象,应该比较的是两个对象的引用。
如果我们这样操作:
> var m = {} undefined > n = m {} > n === m true
表示两个变量都指向同一个对象,所以它们就是相同的了。
2.不同类型的比较
还有下面这个比较特殊的情况
> 12 == "12" true > null == undefined true > undefined == false false > null == false false > null === undefined false
为什么整型能够等于字符串"htmlcode">
> 1 + 2 3 > 1 + "2" '12' > 2 < "12" true > "2" < "12" false
从上面例子可以看出,数值2确实是比字符串12小的。如果比较之前是数值转换成字符串那结果应该是"2" > "12"才对。
还不相信?我再举个例子。
> "12d" > 12 false > "12d" < 12 false > "12d" == 12 false > "12" < "12d" true
这是为什么呢?如果是将12转换成字符串的话,那12d应该是大于12才对吧。为什么怎么比较都是false"htmlcode">
> NaN < 1 false > NaN > 1 false
NaN无论跟什么进行比较,都会返回false。包括它自己。所以要判断一个变量是不是NaN最好的办法就是x != x如果返回的是true则表明x是NaN。那么这里应该就是当12d要转换成数值类型的时候由于带有特殊的字符,最后变成了NaN了,跟数值类型无论怎么比较结果都是false。
对于数字与字符串操作符来说,加号运算符跟比较运算符的行为有所不同。加号运算符更偏爱字符串,如果其中一个操作数是字符串的话则会转换成字符串。而比较运算符则比较偏爱数字,只有在两个数字都为字符串的时候才会进行字符串比较。
至于上面的null 跟 undefined。。。。。我暂时也不知道怎么解释它们的行为。我也只能姑且记住。因为它们比较特殊。
3.对象跟原始值的比较
如果两个需要比较的对象一个是javascript对象一个是字符串,则会进行某种程度上的类型转换。想办法把对象的值转换成原始值。一般来说就有valueOf, toString
两种方法。下面是一个空对象的转换流程:
// 我直接明文写出来了 > a = {} {} // 1. valueOf 转换 > a.valueOf() {} // 2. 如果上面操作得到的不是一个原始值则进而用toString 转换。(反之亦然) > a.toString() '[object Object]' > a == '[object Object]' true
上面其实是一个内置对象的转换过程,也是javascript的机制。首先它会调用valueOf
进行转换,如果得到的值并不是一个原始值,则会进而调用toString
进行转换,最后得到的值是'[object Object]'
一个很奇怪的值,不过它是原始值。如果把变量a跟这个值做相等判断(不是全等)则可以得出一个true的结果。(是不是被它搞崩溃了?)
然而权威指南给了如下原则,我们可以参考一下。
原始值的转换JavaScript语言核心内置类首先尝试使用ValueO
f转换,然后使用toString
进行转换。除了日期类,它只使用toString
进行转换。那些不是JavaScript核心中的对象则通过各自的实现中定义的方式来转换为原始值。
根据上面的解释。我们的a={}与原始值进行比较的时候,会先调用valueOf
函数,它的结果是{}显然不是一个原始值。则会使用toString
进行转换。最后得出了那个很奇怪的结果。不过这个很奇怪的结果'[object Object]'
确实是 {}的原始值。(它是字符串的字面量)。
以上就是Javascript中的比较汇总,希望本文所述对大家学习javascript时有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】
- 陈思安.1990-国语钢琴酒吧5CD【欣代唱片】【WAV+CUE】
- 莫文蔚《莫后年代20周年世纪典藏》3CD[WAV+CUE][2G]
- 张惠妹《我要快乐》华纳[WAV+CUE][1G]
- 罗大佑1982《之乎者也》无法盗版的青春套装版 [WAV+CUE][1G]