资讯专栏INFORMATION COLUMN

运算符 比较运算符

jubincn / 1909人阅读

摘要:对象与数值比较时,对象转为数值等同于对象与字符串比较时,对象转为字符串等同于等同于对象与布尔值比较时,两边都转为数值等同于等同于相等运算符的缺点相等运算符隐藏的类型转换,会带来一些违反直觉的结果。

1.概述

大于运算符
< 小于运算符
<= 小于或等于运算符
= 大于或等于运算符
== 相等运算符
=== 严格相等运算符
!= 不相等运算符
!== 严格不相等运算符
2.大小与运算符:字符串的比较 大小于号
3.大小与运算符:非字符串的比较
4.严格相等运算符 ===
5.严格不相等运算符
6.相等运算符==
7.不相等运算符

区别是相等运算符(==)比较两个值是否相等,严格相等运算符(===)比较它们是否为“同一个值
概述

2.大小与运算符:字符串的比较 大小于号
字符串按照字典顺序进行比较

3.大小与运算符:非字符串的比较
如果两个运算子之中,至少有一个不是字符串,需要分成以下两种情况

(1)原始类型值

先转成数值再比较
5 > "4" // true
// 等同于 5 > Number("4")
// 即 5 > 4

true > false // true
// 等同于 Number(true) > Number(false)
// 即 1 > 0

2 > true // true
// 等同于 2 > Number(true)
// 即 2 > 1

任何值(包括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"
两个对象之间的比较也是如此。

[2] > [1] // true
// 等同于 [2].valueOf().toString() > [1].valueOf().toString()
// 即 "2" > "1"

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

{ x: 2 } >= { x: 1 } // true
// 等同于 { x: 2 }.valueOf().toString() >= { x: 1 }.valueOf().toString()
// 即 "[object Object]" >= "[object Object]"

4.严格相等运算符 ===
如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

(4)undefined 和 null

undefined和null与自身严格相等。

undefined === undefined // true
null === null // true
由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

5.严格不相等运算符
6.相等运算符==

(1)原始类型值

原始类型的值会转换成数值
1 == true // true
// 等同于 1 === Number(true)

0 == false // true
// 等同于 0 === Number(false)

2 == true // false
// 等同于 2 === Number(true)

2 == false // false
// 等同于 2 === Number(false)

"true" == true // false
// 等同于 Number("true") === Number(true)
// 等同于 NaN === 1

"" == 0 // true
// 等同于 Number("") === 0
// 等同于 0 === 0

"" == false // true
// 等同于 Number("") === Number(false)
// 等同于 0 === 0

"1" == true // true
// 等同于 Number("1") === Number(true)
// 等同于 1 === 1

"n 123 t" == 123 // true
// 因为字符串转为数字时,省略前置和后置的空格
(2)对象与原始类型值比较

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

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

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

// 对象与布尔值比较时,两边都转为数值
[1] == true // true
// 等同于 Number([1]) == Number(true)
[2] == true // false
// 等同于 Number([2]) == Number(true)

undefined == null // true

(4)相等运算符的缺点

相等运算符隐藏的类型转换,会带来一些违反直觉的结果。

0 == "" // true
0 == "0" // true

2 == true // false
2 == false // false

false == "false" // false
false == "0" // true

false == undefined // false
false == null // false
null == undefined // true

" trn " == 0 // true

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106044.html

相关文章

  • 搞定PHP面试 - 算符知识点整理

    摘要:除法运算符总是返回浮点数。取模运算符的结果和被除数的符号正负号相同。使用位运算符时要特别注意优先级。太空船运算符组合比较符当小于等于大于时分别返回一个小于等于大于的值。递增递减运算符不影响布尔值。 一、算术运算符 1. 概览 例子 名称 结果 $a + $b 加法 $a 和 $b 的和。 $a - $b 减法 $a 和 $b 的差。 $a * $b 乘法 $a 和 ...

    HelKyle 评论0 收藏0
  • JavaSceipt核心语法——算符

    摘要:运算符运算符一共分为六种算数运算符比较运算符逻辑运算符赋值运算符字符串联接运算符条件运算符运算符的概念提供的一组用于操作数据值的运算符操作符。这些运算符可以按照作用的不同或者操作变量数量的不同进行分类。 运算符 ——运算符一共分为六种;1.算数运算符2.比较运算符3.逻辑运算符4.赋值运算符5.字符串联接运算符6.条件运算符——运算符的概念;JavaScript提供的一组用于操作数据值...

    刘德刚 评论0 收藏0
  • javascript —— 算符

    摘要:算术运算符中的算术操作主要通过算术运算符来实现,算术运算符包括一元算术运算符和二元算术运算符两种。一元算术运算符一元算术运算符用于一个单独的操作数,并产生一个新值。 算术运算符 javascript中的算术操作主要通过算术运算符来实现,算术运算符包括一元算术运算符和二元算术运算符两种。 一元算术运算符 一元算术运算符用于一个单独的操作数,并产生一个新值。在javascript中,一元运...

    Ethan815 评论0 收藏0
  • js-数据运算

    摘要:跳过第二个运算子的机制,被称为短路有些程序员喜欢用它取代结构等价于运算符可以多个连用返回第一个布尔值为的表达式的值。 一、运算符概述 1、定义 JavaScript中运算符主要用于连接简单表达式,组成一个复杂的表达式 2、运算符类别 算数运算符 赋值表达式 比较表达式 布尔运算符 位运算符 二、算数运算符 1、加法运算符(Addition):x + y 加法运算符是在运行时决定,到...

    sf190404 评论0 收藏0
  • [零基础学python]眼花缭乱的算符

    摘要:下面列出一个表格,将所有的运算符表现出来。比较运算符所谓比较,就是比一比两个东西。由于其在符号逻辑运算中的特殊贡献,很多计算机语言中将逻辑运算称为布尔运算,将其结果称为布尔值。布尔所创立的这套逻辑被称之为布尔代数。 在计算机高级中语言,运算符是比较多样化的。其实,也都源于我们日常的需要。 算术运算符 前面已经讲过了四则运算,其中涉及到一些运算符:加减乘除,对应的符号分别是:+ -...

    terro 评论0 收藏0
  • JS比较算符

    摘要:对于两个数值相同的数字应该使用严格比较运算符,和任何值不相等,包括其自身,正数零等于负数零。对于和类型而言,应使用严格比较运算符比较其自身,使用比较运算符进行互相比较。 严格比较运算符 === 仅当两个操作数的类型相同且值相等为 true,不做类型转换,比较容易理解 类型转换比较运算符 == 当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数...

    ernest.wang 评论0 收藏0

发表评论

0条评论

jubincn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<