码迷,mamicode.com
首页 > 其他好文 > 详细

比较运算符

时间:2018-11-20 11:42:00      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:define   完全   font   声明   变量   number   fun   false   算法   

原文地址:https://wangdoc.com/javascript/

概述

JavaScript一共提供了8个比较运算符。

  • >大于比较运算符
  • <小于比较运算符
  • <=小于等于比较运算符
  • >=大于等于比较运算符
  • ==相等运算符
  • ===严格相等运算符
  • !=不相等运算符
  • >=严格不相等运算符
    这八个比较运算符分为两类:相等比较和非相等比较。两者的规则是不一样的,对于非相等比较,算法是先看两个运算子是否都是字符串,如果是的,就按照字典顺序比较(实际上是比较Unicode码点);否则,将两个运算子都转成数值,再比较数值的大小。

    非相等运算符:字符串的比较

    JavaScript引擎内部首先比较首字符的Unicode码点。如果相等,在比较第二个字符的Unicode码点,以此类推。

    非相等运算符:非字符串的比较

    如果两个运算子都不是字符串,分为以下两种情况
    (1)原始类型值
    如果两个运算子都是原始类型的值,则是先转成数值再比较。
5 > ‘4‘
// 等同于 5 > Number(‘4‘)

任何值(包括NaN本身)与NaN比较,返回的都是false
(2)对象
如果运算子是对象,会转为原始类型的值,再进行比较。对象转换成原始类型的值,算法是先调用valueOf方法;如果返回的还是对象,再接着调用toString方法。

var x = [2];
x > "11" // true
// 等同于 [2].valueOf().toString() > "11"
// 即"2" > "11"

x.valueOf = function() { return "1"; }
x > "11" // false
// 等同于 [2].valueOf() > "11"
// 即"1" > "11"

严格相等运算符

JavaScript提供两种相等运算符:=====
简单的,它们的区别是相等运算符(==)比较两个值是否相等,严格相等运算符(==)比较它们是否为同一个值。如果两个值不是同一类型,严格相等运算符直接返回false,而相等运算符会将它们转换成同一类型,再用严格相等运算符进行比较。
(1)不同类型的值
如果两个值类型不同,直接返回false

1 === "1" // false
true === "true" // false  
true == "true" // false
true == "1" //true

(2)同一类的原始类型
同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相等就返回true,值不同就返回falseNaN与任何值都不相等,包括自身。另外,正0等于负0
(3)复合类型值
两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。

[] === [] // false
{} === {} // false
(function() {} === function() {}) // false

var v1 = {};
v2 = v1;
v1 === v2; // true
注意:**对于两个对象的比较,严格相等运算符比较的是地址,而大于或小于运算符比较的是值**。 **(4)undefined和null** <font color=red>undefined</font>和<font color=red>null</font>与自身严格相等。js
undefined === undefined // true
null === null // true
由于变量声明后默认值是<font color=red>undefined</font>,因此两个只声明没有赋值的变量是相等的。js
var v1;
var v2;
v1 === v2 // true
**(6)相等运算符** 相等运算符用来比较相同类型的数据是,与严格相等运算符完全一样。js
1 == 1.0
1 === 1.0
比较不同类型的数据是,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。 * 原始类型值 原始类型的值会转换成数值再进行比较。js
1 == true // true
// 等同于 1 === Number(true)

* 对象与原始类型值比较
对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转换成原始类型的值,再进行比较。

// 对象和数值比较时,对象转为数值
[1] == 1 //true
// 等同于 Number([1]) == 1

// 对象和字符串比较时,对象转为字符串
[1] == "1" // true
// 等同于String([1]) == "1"
[1, 2] == "1,2" // true

// 对象和布尔值比较时,两边都转为数值
[1] == true // true
[2] == true // false
* undefined和null <font color=red>undefined</font>和<font color=red>null</font>与其他类型比较时,结构都为<font color=red>false</font>,它们互相比较时,结果为<font color=red>true</font>。js
false == null //false
false == undefined // false
0 == null // false
0 == undefined // false
undefined == null // true
```
由于相等运算符隐藏的类型转换,会带来一些违反直觉的结果。因此建议不要使用相等运算符,最好只使用严格相等运算符。

比较运算符

标签:define   完全   font   声明   变量   number   fun   false   算法   

原文地址:https://www.cnblogs.com/chris-jichen/p/9987325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!