JavaScript关系比较运算符如何强制类型?

前端之家收集整理的这篇文章主要介绍了JavaScript关系比较运算符如何强制类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当操作数是不同类型时,JavaScript关系比较运算符适用哪些规则?

例如,如何是真的> null评估?我可以在我的开发者控制台中输入它,结果是真的,但为什么呢?

搜索了一下,但没有发现任何博客文章解释这个,虽然有很多解释类型强制==和===比较运算符.

解决方法

JavaScript关系比较运算符类型强制在 JavaScript specification中定义,特别是在描述运算符的 11.8 to 11.8.5部分中,以及描述强制操作数的过程的部分 9.1 (ToPrimitive)9.3 (ToNumber).

简而言之,4个比较运算符(<,>,< =和> =)尽力将每个操作数转换为数字,然后比较数字.例外情况是两个操作数都是字符串,在这种情况下,它们按字母顺序进行比较.

特别,

>如果参数o是一个对象而不是一个原语,try to convert it to a primitive value通过调用o.valueOf()或 – 如果没有定义o.valueOf或者在调用时没有返回一个原始类型 – 通过调用o.toString()
>如果两个参数都是字符串,则根据它们的lexicographical ordering进行比较.例如,这意味着“a”< “b”和“a”< “aa”都回归真实.
>否则,convert each primitive to a number,表示:

> undefined – >为NaN
> Null – > 0
>布尔基元类型 – >如果为真则为1,如果为假则为0
>字符串 – > try to parse a number从字符串

>然后按照您对运算符的期望比较每个项目,并注意任何涉及NaN的比较评估为假.

所以,这意味着以下内容

console.log(true > null);           //prints true
console.log(true > false);          //prints true
console.log("1000.0" > 999);        //prints true
console.log("  1000\t\n" < 1001);   //prints true

var oVal1 = { valueOf: function() { return 1; } };
var oVal0 = { toString: function() { return "0"; } };

console.log(oVal1 > null);         //prints true
console.log(oVal0 < true);         //prints true
console.log(oVal0 < oVal1);        //prints true

猜你在找的JavaScript相关文章