Javascript中的"=="与"==="

Javascript是弱类型语言,那么在进行变量比较的时候就需要多注意。


JavaScript 有 5 种原始类型: Undefined、Null、Boolean、Number 和 String。


一、对于有原始类型(number、string、boolean)参与的比较:

    1)使用 “==”比较时:总是试图比较两者的“值”。如果类型不一致,则试图转换成相同类型后再比较“值”


console.info(1 == '1'); //输出 true
console.info(1 == true); //输出 true
console.info('1' == true); //输出 true

    

    2)使用 “===”比较时:不作类型转换,纯粹的比较


console.info(1 === '1'); //输出 false
console.info(1 === true); //输出 false
console.info('1' === true); //输出 false


如果一个基本类型与一个object或function类型进行“==”比较时,则先调用object或function的valueOf后进行比较:


var obj = { valueOf: function () { console.info('valueOf'); return 1 }, toString: function () { console.info('toString'); return '1' } }
console.info(1 == obj); //输出 valueOf true
console.info('1' == obj); //输出 valueOf true
console.info(true == obj); //输出 valueOf true

console.info(1 === obj); //输出 false
console.info('1' === obj); //输出 false
console.info(true === obj); //输出 false


而当Object中没有valueOf函数,则调用toString方法:


var obj = { toString: function () { console.info('toString'); return '1' } }
console.info(1 == obj); //输出 toString true
console.info('1' == obj); //输出 toString true
console.info(true == obj); //输出 toString true

console.info(1 === obj); //输出 false
console.info('1' === obj); //输出 false
console.info(true === obj); //输出 false


二、对于只有object, function两者参与的比较:

    ==与===是一样的,因为是直接进行“指针地址”比较。


var obj = { valueOf: function () { console.info('valueOf'); return 1 } }
var obj1 = { valueOf: function () { console.info('valueOf'); return 1 } }
var obj2 = obj;

console.info(obj == obj1); //输出 false
console.info(obj === obj1); //输出 false

console.info(obj == obj2); //输出 true
console.info(obj === obj2); //输出 true


四、对于有Null、Undefined参与的比较时:

    nll、undefined在与别的类型进行“===”比较时,结果都是false。而进行“==”比较的时,几乎也是false,除了如下特殊情况:

console.info(undefined == null); //输出 true



发表评论:

«   2021年10月   »
123
45678910
11121314151617
18192021222324
25262728293031
搜索
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
文章归档
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-BlogPHP 1.5.1 Zero

©2016 Sfaqs.com Rights Reserved. ICP备13067735号