Una

接下来的日子,陆续把未总结的问题补充起来......

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、了解js中的数据类型:

js的数据类型可以分为2大类,即基本数据类型和引用类型。

基础数据类型分为:undefined、null、String类型、Number类型、Boolean类型。

引用类型:object类型(大多数的引用类型都是object的实例,常用的引用类型有:Array(数组)、Date(日期)、RegExp(正则)、Function(函数)等)。

 

二、两者的区别:

个人觉得相比《javascript高级程序设计第三版》,《Javascript权威指南第四版》这本书将这两者的区别总结的更好更仔细,下面的总结主要参考了《Javascript权威指南第四版》。

==相等运算符和===等同运算符都是用来检测两个值是否相等,相等返回true,不等返回false;==是相等运算符,它采用比较宽松的同一性定义(即允许进行类型转换)来检测两个运算数是否相等;===是等同运算符,它采用严格的同一性定义检测两个运算数是否完全等同。

(《Javascript权威指南第四版》一书中将=读作"赋值",将==读作"等于",将===读作"完全等同",个人觉得这样区别更好的避免了将它们混淆)

 

===运算符比较两个值是否完全相同的规则:

我将其规则归纳为2大类比较:

1.两个基本数据类型之间的比较:a)如果两个值的类型不同,则两个值就不同(null和undefined也是属于不同类型)。

                                  b)NaN(不是一个数)永远不会和其他任何值相等包括它自身

        验证:

                                    

 

2.两个引用类型(对象、Array、Function)中的比较:当两个值引用的是同一个对象、数组或函数,则他们完全等同。(关于引用类型的比较==和===差别不是很大)如果这两个值引用的不是同一个对象,即时它们的对象具有完全相同的属性或数组具有完全相同的元素,这两个值也不完全等同。

                                                                         

变量在内存中的分配           引用类型在内存中的分配

两个基本变量直接比较,会将两个变量里存的值直接比较;两个引用类型的变量直接比较,比较的是两个变量的内存地址,每一个引用类型变量都会在栈中被分配不同的内存地址,它们的值被保存在堆内存中;所以对于引用类型来说只有两个引用类型的变量都指向同一个对象时,它们两者才会相等。

 

==运算符比较两个值是否相等的规则:

==在比较基本类型的值时要比===稍微复杂一点,==在比较两个类型不同的值时会先转化然后再比较两个变量的值。

规则一样归纳为2大类

1.两个基本数据类型之间的比较:a)两个值类型相同时,比较两个值的等同性,完全相同即相等;

                                          b)两个值的类型不同时,仍然可能相等:1.字符串和数字比较,==运算符会先将字符串转化成数字,然后再将两个值进行比较;

                                                                                             2.一个值为true,转化为1,再比较;一个值为false,转化为0,再比较;

                                                                                            3.null==undefined相等(===比较两者不相等,这是和==运算符的区别)

2.引用类型中的比较:

 

关于toString()和valueOf()的使用我在这里以数组对象为例做了分析(可能总结的不是很全,以后想到要补充的再补充):

js之引用类型

 

总结:实际运用中建议使用"==="等同运算符来作比较,也符合javascript编码规范

posted on 2016-08-11 21:29  youyi2016  阅读(1105)  评论(0编辑  收藏  举报