摘要:对象与数值比较时,对象转为数值等同于对象与字符串比较时,对象转为字符串等同于等同于对象与布尔值比较时,两边都转为数值等同于等同于相等运算符的缺点相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
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
摘要:除法运算符总是返回浮点数。取模运算符的结果和被除数的符号正负号相同。使用位运算符时要特别注意优先级。太空船运算符组合比较符当小于等于大于时分别返回一个小于等于大于的值。递增递减运算符不影响布尔值。 一、算术运算符 1. 概览 例子 名称 结果 $a + $b 加法 $a 和 $b 的和。 $a - $b 减法 $a 和 $b 的差。 $a * $b 乘法 $a 和 ...
摘要:运算符运算符一共分为六种算数运算符比较运算符逻辑运算符赋值运算符字符串联接运算符条件运算符运算符的概念提供的一组用于操作数据值的运算符操作符。这些运算符可以按照作用的不同或者操作变量数量的不同进行分类。 运算符 ——运算符一共分为六种;1.算数运算符2.比较运算符3.逻辑运算符4.赋值运算符5.字符串联接运算符6.条件运算符——运算符的概念;JavaScript提供的一组用于操作数据值...
摘要:算术运算符中的算术操作主要通过算术运算符来实现,算术运算符包括一元算术运算符和二元算术运算符两种。一元算术运算符一元算术运算符用于一个单独的操作数,并产生一个新值。 算术运算符 javascript中的算术操作主要通过算术运算符来实现,算术运算符包括一元算术运算符和二元算术运算符两种。 一元算术运算符 一元算术运算符用于一个单独的操作数,并产生一个新值。在javascript中,一元运...
摘要:下面列出一个表格,将所有的运算符表现出来。比较运算符所谓比较,就是比一比两个东西。由于其在符号逻辑运算中的特殊贡献,很多计算机语言中将逻辑运算称为布尔运算,将其结果称为布尔值。布尔所创立的这套逻辑被称之为布尔代数。 在计算机高级中语言,运算符是比较多样化的。其实,也都源于我们日常的需要。 算术运算符 前面已经讲过了四则运算,其中涉及到一些运算符:加减乘除,对应的符号分别是:+ -...
摘要:对于两个数值相同的数字应该使用严格比较运算符,和任何值不相等,包括其自身,正数零等于负数零。对于和类型而言,应使用严格比较运算符比较其自身,使用比较运算符进行互相比较。 严格比较运算符 === 仅当两个操作数的类型相同且值相等为 true,不做类型转换,比较容易理解 类型转换比较运算符 == 当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数...
阅读 3538·2021-11-22 15:11
阅读 4592·2021-11-18 13:15
阅读 2683·2019-08-29 14:08
阅读 3530·2019-08-26 13:49
阅读 3063·2019-08-26 12:17
阅读 3265·2019-08-26 11:54
阅读 3097·2019-08-26 10:58
阅读 2007·2019-08-26 10:21