您所在的位置:小祥子 » 编程 » JavaScript » 正文

== 和 ===

时间:2015-08-12 编辑:放牛娃也有春天 来源:CnBlogs

  Object 的 valueOf 方法

  valueOf()函数返回指定对象的原始值。

  JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。因此,不同类型对象的valueOf()方法的返回值和返回值类型均可能不同。

  

  Object 的 toString() 方法

  toString()函数的返回值为String类型。返回当前对象的字符串形式。

  JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要。

  

  "==" 与 "===" 

  "===" 和 "==" 都是用来比较两个值是否相等。前者称为严格相等运算符,判断是否严格相等;后者称为相等运算符,判断是否相等,这个是允许类型转换的。

  "===" 这个判断比较简单

  1.   如果数据类型不一样则不相等
  2.   如果是引用类型,除非指向同一个数组、对象这样的,那么相等,其他都不相等
  3.   其他比较就是常规的比较了

  "==" 这个比较复杂

  如果都是引用类型,或者同是基本类型,同"==="

  null 和 undefined 相等

  1.   一个是数字,另一个字符串,字符串转换为数字后比较
  2.   含有一个boolean值,先将其转换为数字后比较
  3.   其中一个值是对象,将其转换为原始值进行比较(字符串或者数字,根据情况来转换)。

  对象转换为原始值

  对象转换为boolean比较简单,都是为true

  对象转换为数字,先调用valueOf方法,如果为原始值,转换为数字(需要的话);不成功则调用toString()方法,如果为原始值,转换为数字(需要的话),也不成功就抛出异常

  对象转换为字符串,同样的,先调用toString()方法,如果为原始值,转换为字符串(需要的话);不成功则调用valueOf()方法,,如果为原始值,转换为字符串(需要的话),也不成功就抛出异常

  转换的时候到底转换为数字还是字符串,这个看情况需要。

  举几个例子

new Date() + 1
//"Tue Aug 11 2015 23:35:47 GMT+0800 (中国标准时间)1"
//+ 期望前面的值是一个字符串,调用的Date的toString()方法
+new Date() //1439307361984
//+ 期望后面的值是一个数字,调用的Date的valueOf()方法处理

  举几个"=="的例子

[] == ![]
//第一步:![] 转换为boolean值为false
//第二步:false  转换为数字为 0
//第三步:[] 转换为数字为 0 
//判断为true ,第二步和第三步谁先都没有关系

"1" == true
// true 转换为 1
// "1" 转换为 1

"1,2" == [1,2]
// [1,2] 转换为字符串 "1,2"
关键词: