JavaScript条件表达式的布尔判断

Visionpro 使用CogPMAlignTool工具提取匹配轮廓点 【代码】Visionpro 使用CogPMAlignTool工具提取匹配轮廓点。 阅读详情

一、JavaScript条件表达式的布尔判断
在JavaScript中,对于单独作为判断式里的一个表达式if(aaa)这样的条件判断时,会先把aaa转换成布尔型true或false,再判断其真假。其他类型转换布尔型的规则是:
1、对于只定义未赋值的变量var aaa,其值为undefined,为false.
2、字符串:空字符串""转换布尔型为false,其它为true;
3、数字:数字0转换为布尔值为false,非0数字为true;
4、对象:为null的对象转换为布尔型为false,其它为true;
5、对象属性值:未声明的属性值、属性值为0或空串""或false或null的,转换布尔值为false,其余为true;

对于用==号判断的条件表达式if(aaa==bbb)与if(aaa)的情况时,以下是几个容易出错的例子:

<script type="text/javascript">
    var a = "";
    if (a == 0) {
        alert("空串==0为真");   //打印
    }
    if (0 == a) {
        alert("0==空串为真");   //打印
    }
    if (0) {
        alert("0 true");
    } else {
        alert("0 false");       //打印
    }
    var v = 0;
    if (v) {
        alert("值为0的变量 true");
    } else {
        alert("值为0的变量 false"); //打印
    }
    if (v == false) {
        alert("0==false为真");      //打印
    }

    var obj = new Object();
    obj.aa = 0;
    obj.bb = false;
    if (obj.aa) {
        alert("对象属性值为0 true");
    } else {
        alert("对象属性值为0 false");       //打印
    }
    if (obj.bb) {
        alert("对象属性值为false true");
    } else {
        alert("对象属性值为false false");   //打印
    }

    if (obj.aa == obj.bb) {
        alert("震撼");      //打印
    }
    if (obj.bb == 0) {
        alert("震撼++");    //打印
    }
    if (obj.bb == "") {
        alert("震撼++");    //打印
    }
</script>

要知道以下三个是为true的:  
""==0  
""==false 
0==false 

以下几个也是为true的,奇怪吧:  
0=="      " 
0=="   0  " 
0=="       000000000    

总结如下:
1.==和!=是比较运算符,但当类型不同时会进行类型转换,例如false==0这个条件为真;
2.而===和!==不会进行类型转换,类型不同就判断它们不同,所以false===0这个条件为假;
3.一般为了安全起见,都是使用===进行比较的;

二、运算符==读作相等,而运算符===则读作等同
相等运算符:
如果操作数具有相同的类型,则判断其等同性,如果两个操作数的值相等,则返回true(相等),否则返回false(不相等).
如果操作数的类型不同,则按照这样的情况来判断:
1.null和undefined相等
2.其中一个是数字,另一个是字符串,比较规则是:
    if该字符串是空字符串""或者是空格组成的字符串"     ",则先将该字符串转换为数字0,再做比较,例如:
         0==""为true   0=="      "也为true;
    else其他情况,则先将该字符串转换为数字,再做比较,例如12=="   12  "为true的;
3.一个是true,先转换成1(false则转换为0),再做比较
4.如果一个值是对象,另一个是数字/字符串,则将对象转换为原始值(通过valueOf()或者toString()方法,其中valueOf方法优先)
5.其他情况,则直接返回false
等同运算符:
如果操作数的类型不同,则不进行值的判断,直接返回false
如果操作数的类型相同,分下列情况来判断:
1.都是数字的情况,如果值相同,则两者等同(有一个例外,就是NaN,NaN与其本身也不相等),否则不等同
2.都是字符串的情况,与其他程序设计语言一样,如果串的值不等,则不等同,否则等同
3.都是布尔值,且值均为true/false,则等同,否则不等同
4.如果两个操作数引用同一个对象(数组,函数),则两者完全等同,否则不等同
5.如果两个操作数均为null/undefined,则等同,否则不等同

 var obj = {  
    id : "self",  
    name : "object" 
};  
var oa = obj;  
var ob = obj;  
alert(oa == ob);  //true
alert(oa === ob);  //true

再来看一个对象的例子:

var obj1 = {   
    id : "self",   
    name : "object",   
    toString : function(){   
       return "object 1";   
    }   
}   
var obj2 = "object 1";   
alert(obj1 == obj2);   //true
alert(obj1 === obj2);  //false

obj1是一个对象,而obj2是一个结构与之完全不同的字符串,而如果用相等操作符来判断,则两者是完全相同的,因为obj1重载了顶层对象的toString()方法。
而!=不等和!==不等同,则与==/!==相反。因此,在JavaScript中,使用相等/等同,不等/不等同的时候,一定要注意类型的转换,这里推荐使用等同/不等同来进行判断,这样可以避免一些难以调试的bug。

 

来自:http://wangweiwei358.iteye.com/blog/726113

 

 

【浅读论文-红外和可见光图像融合-CNN】Infrared and Visible Image Fusion using a Deep Learning Framework 1.这篇是2018年ICPR会议上发表的一篇文章1。博主个人觉得这算比较早期在VIF(红外光和可见光图像融合)中加入了深度学习这一模型的论文。2.这篇文章并不是完全使用深度学习的模型,模型主体在图像分解和融合仍然采用传统的方法,只有其中一个分支在特征提取和重建方面用到了VGG网络。3.论文地址4.代码地址本文提出了基于深度学习框架的一种新算法。本文提出使用下述论文中Image fusion with guided filtering2中的分解方法将源图像分解为基本部分和细节内容。 阅读详情

相关推荐

要配置西门子G120XA变频器实现**端子启停**和**Modbus RTU(485)频率给定

如有问题,可通过STARTER软件在线诊断Modbus通讯状态。要配置西门子G120AX变频器实现。

微:13763355074 4844

JS中判断一个值是否为布尔类型的值

注意:是字符串

Always-Learning 1万+

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 435

JavaScript中判断条件之布尔值

true–真, false–假 <style> #box { width: 200px; height: 200px; background-color: red; } </style> </head> <body> <button id="btn">点击</button> <div id="box"></div> <script&g.

xuekatie的博客 2528

从零搭建智能车竞赛卡丁车:自动驾驶科目中的锥桶识别与路径规划实战教程

本文提供了一份从零搭建智能车竞赛卡丁车的实战教程,重点解析了自动驾驶科目中的核心环节:锥桶识别与路径规划。内容涵盖硬件选型、传感器部署、基于单目视觉的识别算法,以及适用于嵌入式平台的轻量级路径规划与跟踪策略,旨在帮助参赛者与爱好者系统掌握关键技术,完成稳定可靠的自动驾驶系统搭建。

lg888的博客 1166

Linux安装消息队列IBM MQ 7.5开发版安装配置详解

消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M

zhx__的博客 5165

javaScript中的布尔值判断

javaScript中的布尔值判断 if(condition)的condition求值结果若非布尔值,ECMAScript会自动调用Boolean()转换函数将结果转换为布尔值。 转换规则为:

qq_33271461的博客 7839

RingBuffer 环形缓冲区----镜像指示位

称作环形缓冲区,也称作环形队列(circular queue),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。这个宏定义用于计算向下对齐的地址。size和align。size是要对齐的内存大小,align是所需的对齐大小。这个宏返回一个值,该值是size向下对齐到align边界后的地址。例如,假设我们有一个 32 位的系统,并且我们需要将数据对齐到 64 位的边界。我们可以使用在这个例子中,data数组的大小为 10 个元素,我们需要将其对齐到 8 字节边界。宏返回data。

呵呵哒!的博客 2408

JavaScript-34:逻辑运算符练习

var num = 7; var str = "我爱你~中国~"; console.log(num > 5 && str.length >= num); // true console.log(str.length); // 7 console.log(num < 5 && str.length >= num); // false console.log(!(num < 10)); //false console.log(!(num &lt

臧小川的博客 369

STM32G431的 FDCAN使用5M加速时,出现奇葩问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1637

knowhere | 第一课:项目导论与环境搭建

摘要 本课程是Knowhere项目的第一课,重点介绍项目整体架构和开发环境搭建。Knowhere定位为AI Agent的文档记忆基础设施,通过解析多格式文档并保留结构化信息(如章节层级、表格语义等),为Agent提供可导航的文档知识。项目采用Python monorepo结构,核心包括: apps/api:FastAPI服务,处理HTTP请求和流程调用 apps/worker:Celery服务,执行文档解析等耗时任务 packages/shared-python:共享基础设施层 课程明确了各层职责边界,并推

weixin_43674738的博客 152

条件语句之 if语句

if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。所谓布尔值,指的是JavaScript的两个特殊值,true表示真,false表示伪。

xiaolu_77m的博客 320

【产品经理修炼之道】- 基金产品-“TA系统 ”

TA:Transfer Agent 缩写,通常称成“登记过户”。开放式基金登记过户(TA)系统是基金的登记过户系统。其功能涵盖了基金交易业务的各个环节,包括账户业务处理,如投资者开户、修改账户资料、挂失/解挂等;日常交易业务处理,如认购、申购(一般申购和定期定额)、赎回(一般赎回、指定赎回、预约赎回等)、转托管、基金转换等;特殊业务处理,如非交易过户、账户冻结/解冻等;分红业务处理,如现金分红和红利再投资。

xiaoli8748的专栏 1677

JavaScript if语句

if-else if-else语句,会自上向下依次对if后的条件表达式进行求值判断,if语句只会控制紧跟其后的哪一行代码,如果希望可以控制多行代码,可以使用{}将语句括起来。如果条件表达式结果为true,则执行当前if后的语句,执行完毕语句结束。if-else if-else语句中只会有一个代码块被执行,如果所有的条件表达式都是false,则执行else后的语句。if-else执行时,先对条件表达式进行求值判断,if语句在执行会先对if后的条件表达式进行求值判断,如果结果为true,则执行if后的语句。

hgvhjgghv的博客 607

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

&&和||详解

1,|| 或 详解 alert(true||false); // true alert(false||true); // true alert(true||true); // true alert(false||false); // false 2,&& 与 详解 alert(true&&false); // false alert(true&&true); // true alert(false&&false); // false alert

weixin_42981168的博客 362

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java script 中一个感叹号、两个感叹号、三个感叹号,!、!!、!!!区别

推理假设 if(e!=null&&e!=undefined&&e!=''&&e!=0) 很好理解,判断一个值是否为空 if(e) 判断变量是否“为空”,“为空”就通过。 if(!e) 判断变量是否“非空”,“非空空”就通过。 ( if(e) 取反 ) if(!!e) 等价于 if(!e) 取反 if(!!!e) 等价于 if(!!e) 取反 结论 if(e!=null&&e!=undefined&&e!=''&amp

一个吃水不忘挖井人的博客。希望能帮助到你 1800

js bool true false 比较

.想到一个好玩的,运行如下 javascript :  if ('0') alert("'0' is true");  if ('0' == false) alert("'0' is false");结果是,两次都 alert 了!那么 '0' 到底是 true 还是 false 呢? 答案是:在js做比较的时候,有这样的三条规则: 如果比较的两者中有bool,会把 bool 先转换为对应的 nu...

爱码农爱生活 107

JavaScript - Day02 - 逻辑判断

2.因为if条件表达式的结果为true或false,所以可以直接将布尔值当做条件放入小括号内,如果将非布尔值的表达式放入条件小括号内,则会隐形转换类型。4.switch执行效率比 if 多分支要高 --------switch只执行对应 条件值的一次,if 需要前面条件都判断。----------如果条件值与数据都不相符,则执行这条输出。1.简写方法:条件?条件为true时执行的代码 : 条件为false时执行的代码;5.当break省略后,不在判断后面的条件,直接输出其后面最近的条件的执行结果。

DZYUL的博客 335

javaScript中的流程控制

if后面的条件表达式可以是具体的值也可是表达式最终都是根据布尔值来判断的,不论是具体的值还是表达式都会转换成布尔值。只能是变量和值不能是表达式(我认为他不是很重要只是个人认为如果有什么不对的请高手指点)分类:单分支、双分支、多分支、分支嵌套。

hxj_web的博客 212

js逻辑分支

逻辑分支

qq_47750985的博客 327

JS (if条件中的细节)

<script> // if(条件) { // 当条件为true的时候执行的代码段 // } // if(!isNaN(123)) { // console.log('这是个数字'); // } // if(false) { // console.log('假的'); // } else { // console.log('真的'); // } // 任何内容都可以放在小括号中,会有一个隐形的类型转化,最终都转化为布尔值了 if(0) { console.

APLL_的博客 236
上一篇: .NET修改XML节点属性
下一篇: JavaScript 获取滚动条高度+常用js页面宽度与高度
aspnet2002web
博客等级 码龄21年 482粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值