0

0

javascript基础课程之关系表达式定义用法详解

伊谢尔伦

伊谢尔伦

发布时间:2017-07-19 10:24:53

|

1542人浏览过

|

来源于php中文网

原创

关系运算符用于测试两个值之间中的关系(相等、小于或“是...的属性”),根据关系是否存在而返回true和false.关系表达式总是返回一个布尔值,通常在if while或者for语句中使用关系表达式,以控制程序的执行流程。

i相等和不等运算符

“==”和"==="运算符用于比较两个值是否相等,两个运算符允许任意类型的操作符。如果相等则返回true,否则返回false.“===”也称为严格相等运算符(有时称为恒等运算符),它用于检测两个操作数是否严格相等。“==”运算符称作相等运算符,它用来检测两个操作数是否相等,这里的相等定义宽松,可以允许进行类型转换。

javascript支持“=”,“==”,“===”运算符,你应当理解(赋值,相等,恒等)运算符之间的区别。并在编程中小心使用。为了减少混淆,应该把“=”称作“得到或赋值”,把“==”称作“相等”,把“===”称作“严格相等”。

“!=”和“!==”运算符规则是“==”,“===”运算符的求反,“!”是布尔非运算符,我们将“!=”,“!==”称为不相等,不严格相等

立即学习Java免费学习笔记(深入)”;

javascript对象的比较是引用的比较,而不是值的比较。对象和本身是相等的,但和人和对象都不相等。如果两个对象具有相同数量的属性,相同的属性名和值,它们依然是不相等的。相应位置的数组元素是相等的两个数组也是不相等的。

严格相等运算符"==="首先计算操作数的值,然后比较这两个值,比较过程没有任何类型转换。

如果两个值类型不想同,则它们不相等
如果两个值都是null或者undefined,则它们不相等
如果两个值都是布尔值true或者false, 则它们相等
如果其中一个值是NaN,或者两个值都是NaN ,则它们不相等,NaN和其它值都是不相等的,包括它本身。
如果两个值为数字且相等,则它们相等。如果一个值为0,令一个值为-0,则它们同样相等。
如果两个值为字符串,并且所含对应位上的16位数(参照3章2节)完全相等,则它们相等。如果他们的长度或内容不同,则不相等。两个字符串可能函数完全一样并且所显示出的字符也一样,但具有不用编码的16位值,javascript并不对Unicode进行标准转换,因此这样的字符串通过"==="和"=="运算符的比较结果也不相等。第三部分的String.localeCompare()提供了另外一种比较字符串的方法。
如果两个引用值指向同一个对象,数组或函数,则它们是相等的。如果指向不同的对象,则它们是不等的,尽管两个对象有完全相同的属性。
相等运算符"=="和恒等运算符相似,但相等运算符比较并不严格。如果两个数不是同一类型,那么相等运算符会尝试进行一些类型转换,然后进行比较。

如果两个操作类型相同,则和上文相等运算符的比较规则一样。如果严格相等,那么比较结果相等。如果他们不严格相等,则比较结果不相等。
如果两个操作类型不同,“==”相等操作符也会认为它们相等。检测相等会遵循如下的规则和类型转换:
   如果一个类型是null,令一个是undefined,则它们相等
   如果一个值是数字,另一个是字符串,先将字符串转换为数字,然后使用转换后的值进行比较。
   如果一个值是true,则将其转换为1再进行比较,如果一个值是false,则转换为0比较。
   如果一个值是对象,另一个值是数字或字符串,则使用3章8节3小节的方法的转换规则将对象转换为原始值,然后进行比较。对象通过toString()方法或者valueOf()方法转换为原始值。javascript语言核心的内置类首先尝试使用valueOf()再尝试使用toString(),除了日期类,日期类只能通过toString()转换。那些不是javascript 语言核心中的对象则通过实现中定义的方法转换为原始值。
   其它不同类型之间的比较均不相等
这里有一个判断相等的小例子

"1" == true
这个表达式的结果为true,这表明完全不同类型的值比较结果为相等。布尔值true首先转换为数字1 ,然后再执行比较。接下来字符串“1”也会转换为数字1 ,因为两个数字的值相等,因此结果为true.

ii.比较运算符

小于(

如果第一个操作数小于第二个操作数,则“

小于等于(

大于(>)

大于等于(>=)

....(不详细介绍含义)

比较操作符的操作数可能是任意类型。然而只有数字和字符串才能真正执行比较操作符,因此,那些不是数字和字符串的操作数都将进行类型转换。类型转换规则如下:

如果操作数为对象,则按照3章8节3小节处锁描述的转换规则转换为原始值:如果valueOf()返回一个原始值,那么直接使用这个原始值。否则使用toString() 的转换结果进行比较。
在对转换为原始值之后,如果两个操作数都是字符串,那么将依字母表的顺序对两个字符串进行比较,这里提到的“字母表顺序”是组成这两个字符串的16位Unicode字符的索引顺序。
在对象转换为原始值之后,如果至少一个操作数不去是字符串,那么两个操作数都将为数字进行数值的比较。0和-0是相等的。Infinty壁其它任何数字都大(除了infinty本身),-infinty比任何数字都小(除了它自己本身。)如果一个操作数(或转换后)为NaN,那么比较符总是返回false
对于数字和字符串操作符来说,加号运算符和比较运算符的行为有所不同 ,前者更偏爱字符串,如果它的其中一个操作数是字符串的话,则进行字符串连接操作。而比较运算符则更偏爱数字,只有在两个操作数都是字符串串的时候。才会进行字符串的比较。

1 + 2 //=>3 加法,结果为3
"1" + "2" //字符串连接,结果为"12"
"1" + 2 //字符串连接,2转换为"2",结果"12"
11 "11" "11" "one"

最后需要注意的是,“=”运算符在判断相等的时候,并不依赖相等运算符和和严格相等运算比较规则。相反,小于等于运算符芝是简单的“不大于”,大于等于运算只是“不小于”。只有一个例外,的那个一个操作数(后转换后)是NaN的时候,所有4个比较运算符均会返回fasle.

iii.in运算符

in运算符希望它的左操作数是一个字符串或者可以转换为字符串,希望它的右侧是一个对象。如果右侧的对象拥有一个名为左操作数值的属性名,那么表达式返回true.例如

var point = {
     x: 1,
     y: 1
   } //定义一个对象
   "x" in point //=>true 对象有一个名为x的属性
   "z" in point //=>false 对象无名为z的属性
   "toString" in point // =>true 对象继承了toString方法
   var data = [7, 8, 8]
            "0" in data //=>true 数组包含0
             1 in data //=>true 数字转换为字符串
             3 in data //=>fase 没有索引为3的元素

iiii.instanceof运算符

instanceof运算符希望左操作符为一个对象,右操作数标示对象的类。如果左侧的对象是右侧类的实例,则表达式返回true;负责返回false.第9章将会讲到。javascript对象的类是通过初始化他们的构造函数的来定义的。这样的话,instanceof的右操作数应当是一个函数。比如:

var d = new Date(); //构造一个新对象
  d instanceof Date; //计算结果为true, d是Date() 创建的
  d instanceof Object //计算结果为true ,所有的对象都是Object的实例
  d instanceof Number //计算结果为 false,d不是一个Number对象
  var a = [1,2,3] //数组直接量创建数组
  a instanceof Array //计算结果true a为数组
  a instanceof Object //true 所有的数组都是对象
  a instanceof RegExp //fasle 数组不是正则表达式

需要注意的是,所有对象都是Object的实例。当通过instanceof盘对一个对象是否为一个类的实例的时候,这个判断也叫“父类”(superclass)的检测,如果instanceof的左侧操作对象不是对象的话,instanceof返回false。如果右侧操作不是函数,则抛出类型错误的异常。

为了理解instanceof运算符是如何工作的,必须首先理解“原型类”(prototype chain),原型链作为javascript的继承机制,将在6章2节2小节详细描述。

为了计算表达式o instanceof f ,javascript笔仙首先计算f.prototyoe,然后在原型链中查询o,如果找到,那么o是f(或者f的父类)的一个实例,那么返回true。反之false

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号