热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript赋值运算符和关系运算符

赋值运算符:用以给变量进行赋值

最常见的赋值运算符就是等号(=),将右侧的值赋给左侧的变量(表达式x=y表示将y赋值给x)

x += y // 等同于 x = x + y

还有其他更多的复合赋值运算

 

  • x -= y 等同于 x = x - y
  • x *= y 等同于 x = x * y
  • x /= y 等同于 x = x / y
  • x %= y 等同于 x = x % y
  • x >>= y 等同于 x = x >> y
  • x <<= y 等同于 x = x <
  • x >>>= y 等同于 x = x >>> y
  • x &= y 等同于 x = x & y
  • x |= y 等同于 x = x | y
  • x ^= y 等同于 x = x ^ y

 

这些符合赋值运算符都是先进行指定运算,然后再将值赋给左边

示例:(求10除以3的余数)

Javascript赋值运算符和关系运算符

 


 

关系运算符:

目的:用于判断比较两个值的大小,然后返回一个布尔值,表示是否满足比较条件

  • 如果关系成立返回true
  • 如果关系不成立返回 false

实例:(比较2是否大于1,返回值为true)

Javascript赋值运算符和关系运算符

常用的比较运算符:

Javascript赋值运算符和关系运算符

 

 比较运算符的算法:

比较运算符可以比较各种类型的值,不仅仅是数值类型对的数据,除了相等运算符和精确运算符,其他比较运算符的通用算法如下

  • 如果两个运算子都是字符串,则按照字典顺序比较(比较Unicode编码顺序)
  • 否则两个运算子都先将转化为数值再进行比较。(等同于先调用Number函数)

 

一、除了相等运算符和精确运算符,其他比较运算符

(一)原始类型值的比较

字符串和布尔值都先转换成数字类型,然后再进行比较

var aa=5 > '4' ;
console.log(aa);
// 5 > Number('4')
// 即 5 > 4
aa=true > false; console.log(aa); // Number(true) > Number(false) // 即 1 > 0
aa=2 > true ; console.log(aa); // 2 > Number(true) // 即 2 > 1

Javascript赋值运算符和关系运算符

 

(二)对象的比较

在对对像进行比较之前,要先将对象用valueOf( )方法转换成原始数字类型的值,如果返回的结果还是对象,就继续调用toString( )方法,将其转换成字符类型。

实例:

1、对象与原始数据类型的比较

Javascript赋值运算符和关系运算符

2、对象与对象的比较

var aa=[2];
window.alert(aa > [3])

// 等同于 [2].valueOf().toString() > [11].valueOf().toString()
// 即 '2' > '3'

Javascript赋值运算符和关系运算符

 Javascript赋值运算符和关系运算符

(三)字符串的比较

字符串按照字典顺序进行比较

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

实例:

1、小写的 c 的 Unicode 码点( 99 )大于大写的 C 的 Unicode 码点( 67 ),所以返回 true 。

Javascript赋值运算符和关系运算符

由于Unicode字符集涵盖了所有字符,所以汉字也可以进行比较。

2、因为“天” 的Unicode码点是5929,“地”的Unicode编码是5730,所以返回true

Javascript赋值运算符和关系运算符

 

二、恒等运算符(严格相等运算符)

Javascript中有两个相等运算符, ==和 ===

区别:相等运算符== 比较的是两个值是否相等;

严格相等运算符=== 比较它们是否为“同一个值”,如果不是同一类型的值,严格相等运算符会直接返回 false;

相等运算符== 会将两个值转换为同一数据类型,再用严格相等运算符进行比较。

(一)严格相等运算符的算法:

1、不同类型的值

如果两个类型的值不同,直接返回flase

1是Number类型,"1"是字符串类型的,进行===运算,不同的数据类型所以返回flase;

true是布尔值,"true"字符串类型,不同数据类型返回false;

相等运算中先将数字1和字符"1"转换为相同类型,再进行比较,所以返回true;

Javascript赋值运算符和关系运算符

2、同一类型的原始值

同一类型的原始类型值(字符串,布尔值,数字)进行比较,值相同就返回true,值不同时就返回false

实例:(比较十进制的1和十六进制的1,类型和值都相同,所以返回true)

Javascript赋值运算符和关系运算符

 注意:NaN与任何值都不相同(包括自身),0也不分正负,正0与负0相同。

Javascript赋值运算符和关系运算符

3、同一类的复合类型值

比较同一类型的符合类型值(对象,数组,函数)的数据比较时,不是比较他们的值是否相同,而是比较是否指向同一个对象

Javascript赋值运算符和关系运算符

 比较两个空字对象、空数组、空函数,结果都不相等。

因为对于复合类型的值,严格相等运算比较的是是否引用同一个内存地址,而运算符两侧的空对象,空数组,空函数他们的值都存放在不同的内存地址中,结果当然是false。

如果两个变量引用同一个对象,则他们相等,结果返回true

Javascript赋值运算符和关系运算符

 对于两个对象的比较,严格相等运算符比较的是地址,大于小于号比较的是值。

实例:(前两个比较的是值,最后一个比较的是地址。)

new Date() > new Date() // false
new Date() <new Date() // false
new Date() === new Date() // false

4、Undefined和null

Undefined和null与自身严格相等

Javascript赋值运算符和关系运算符

变量声明后的默认值是Undefined,因此两个只声明未赋值的变量值是相等的

Javascript赋值运算符和关系运算符

5、严格不相等运算符

严格相等运算符有一个对应的“严格不相等运算符”( !== ),两者的运算结果正好相反

Javascript赋值运算符和关系运算符

 

三、相等运算符

相等运算符在数据类型相同的时候,与严格运算符运算规则相同

数据类型不相同的时候,会先将字符类型都转换成一样的,再利用严格运算符进行比较。

类型转换规则:

1、原始类型的值

原始类型的值会转换为数据类型的值再进行比较

Javascript赋值运算符和关系运算符

2、对象与原始类型值比较

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

Javascript赋值运算符和关系运算符

3、Undefined和null类型比较

Undefined和null类型与其他数据进行比较的时候返回的都是flase,这两种数据相互比较的时候返回值为true

Javascript赋值运算符和关系运算符

4、相等运算符的缺点

相等运算符有的时候在数据类型转换对表达式进行变化,容易出错,因此最好不要使用相等运算符(==),要用严格相等运算符

Javascript赋值运算符和关系运算符

5、不相等运算

不相等运算符(!=) 和相等运算符的运算结果相反

 Javascript赋值运算符和关系运算符

 


推荐阅读
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
李林1108_965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有