A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© baiou1995 中级黑马   /  2018-2-10 21:29  /  871 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

里面有很多注意点:
1. undefined和null,undefined比较都是false,这一点在数组越界的时候会遇到
2.数组和对象在判断==时,并不是比较指向栈中的内容是否相等,而是判断指向栈的地址是否相等,因此
var a=[];var b=a;此时a==b是true
var a=[];var b=[];此时a==b是false
3. "true"表示的是内容为 true的字符串变量,它和Boolean类型的true有本质区别



简单说明一下判断==情况
1. 如果类型相同,这个判断很熟悉,除了(NaN==NaN返回false)以外,其他都是熟悉的情况
2. 如果类型不相同①如果两边都是undefined或null,直接返回true,如果只有一边是undefined或null,直接返回false
                            ②如果两边都是number或string或Boolean,那么全部调用ToNumber(系统方法)进行转换判断
                            ③*如果有一边是object,另一边只能是number或string或Boolean, 那么将object调用转换基本类型方法(ToPrimitive):       toString()方法(如果没有toString)则调用valueOf()然后比较
*:其实默认并不全是toString, 系统会根据对象的首选项优先选择toString或valueOf, 一般是toString()  (这里感觉理解有误,望高手指教)
*:一般来说object的toString()返回[object Object], 但是一般会改写toString方法, 例如数组对象的toString和时间对象的toString()

较简单说明一下判断<情况 (首先认识到凡是大小关系, 返回值本应当是true false undefined, 只是显示的时候会把undefined归到false一类,这就是为什么两个数据比较会出现a>b 和 a<=b 均为false)
1.先将两边表达式的值变为基本类型(即只有object会调用ToPrimitive方法(见上))
2.如果大小号两边都是字符串, 那么从前至后比较每个字符(如果没有字符,视为最小-infinite)的code unit(简单理解可以视为Unicode码比较), 如果是等于(即字符相等)则继续往后看, 如果出现>则返回false 如果出现<则返回true, 如果完全相等,则返回false
   例: "abc"<"abc" 返回false   "abc"<"abcde"返回true  "zyx"<"zy"返回false  等等
3.如果大小号两边不全是字符串, 则全部调用ToNumber方法进行比较(如果出现NaN则返回undefined), 否则就是正常数字大小的比较

判断a>b的方法: 看b<a的返回值进行返回
判断a>=b的方法: 看a<b的返回值, a<b返回true 或undefined, 则a>=b返回false 否则返回true
判断a<=b的方法: 看a>b的返回值, a>b返回true 或undefined, 则a<=b返回false 否则返回true



v2-b82f2d58aa3356b8b58c69067b828855_r.jpg (91.07 KB, 下载次数: 12)

v2-b82f2d58aa3356b8b58c69067b828855_r.jpg

1 个回复

倒序浏览
666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马