周大侠啊 进击的 JavaScript(一) 之 类型转换 (3)

否则都转数字比较。Infinity比任何数字都大(除了自身),-Infinity 相反。如果一个操作数是NaN(或转NaN),结果返回false。

11 < 3; "11" < "3"; //true "11" 首个字符串 "1" 的16位Unicode 值比 "3"的16位Unicode 小 //"11".charCodeAt(0).toString(16) 31 //"3".charCodeAt(0).toString(16) 33 "11" < 3; //false "11" 转 11,false {} < 3; //false {}转原始值字符串,字符串转NaN, false null < 3; //true null 转数字

最后要注意的是,<= 和 >= 比较时,并不根据 == 和 === 的规则(在下方)比较,它就仅仅表示 数值 或 字符串 之间的比较。

null >= undefined //false




(3)in运算符

把左操作数转 字符串

in 运算符希望它的左操作数是一个字符串或可以转换为字符串,右操作数是一个对象。如果,右侧的对象拥有一个名为左侧操作数值的属性名,那么表达式返回true。

var point = { x:1, y:2}; "x" in point; //true point 有一个 x 的属性名 var arr = [a,b,c]; 1 in arr; //true 数组的索引就相当于 属性名




(4)! 和 !!

! 它会把操作值 转为 布尔值(“真值”为true,“假值”为false),对布尔值求反。(结果只有true,false)

例:

console.log(!""); //true console.log(!0); //true console.log(!-0); //true console.log(!null); //true console.log(!undefined); //true console.log(!NaN); //true console.log(!false); //true

!! 得到操作值 等价的 布尔值(“真值”为true,“假值”为false)
等同于 Boolean(),经常称!! 为强制转换。
例:

console.log(!!""); //false console.log(!!0); //false console.log(!!-0); //false console.log(!!null); //false console.log(!!undefined); //false console.log(!!NaN); //false console.log(!!false); //false

总结:“假值” 取反都是true, “真值”取反为false;“假值” 强制转换 都是 false, “真值”强制转换为 true




(5)== 和 ===

都知道 == 是判断 左右值 是否想等的。而 === 不仅判断 右右值是否想等,还要判断,类型是否一样。结果返回布尔值

== 的用法
NaN是JavaScript中唯一一个不等于任何值的(包括它自己)。(NaN == NaN) // false

一般对NaN的判断:

function isNaN(num){ return typeof num === "number" && num !== num; }

注意,跟js 自带的 isNaN 方法 不一样。

左右两边类型相同

1、原始值的比较

它们的比较,就是值的直接比较。
比如:

console.log(null == null); //true console.log(undefined == undefined); //true console.log(666 == 666); //true console.log(666 == 1); //false console.log("周大侠啊" == "周大侠啊"); //true console.log("周大侠啊" == "大佬"); //false console.log(true == true); //true console.log(true == false); //false

2、对象的比较

对象和原始值不同,首先,它们是可变的-----它们的值是可修改的:

var o = { x:1 }; //定义一个对象 o.x = 2; //修改x的值 var a = [1,2,3]; //数组也是可修改的 a[0] = 0; //修改数组第一个元素

对象的比较并非值的比较,而是引用(内存地址)的比较。

var o1 = { x:1 }; var o2 = { x:1 }; console.log( o1 == o2 ); //false //即使 对像的属性,值完全相同, 也不相等 var o3 = o1; console.log( o1 == o3 ); //true //o3 和 o1 引用的是同一对象。(即指向的是同一块储存地址) //数组同上 左右两边类型不同

如果 == 两边的 类型不同,则比较时,有以下两个个规则:

undefined等于null

其他都转数字比较

为什么undefined == null 呢?实际上,undefined 是派生自 null 的。

对象通过valueOf 或 toString 转换为原始值,原始值在对应转数字。

总结:左右两边类型不同, == 在比较时,除了(null == undefined),NaN,其他都是转为数字比较, 从来不会转为布尔值!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyzwj.html