说说js的==运算符和if语句

大家都知道,这两个都与布尔值有关,运算符==会返回一个布尔值,而if()或者三元运算符?:都会去判断布尔值,在js中==运算符和===运算符不一样大家都知道,前面一个会进行类型转化,而后面这个不会,而if()里面也会进行类型转化。

先来说说==

先上几个例子:

console.log("123"==123);//true

console.log([1,2,3]==123);//false

console.log([1,2,3]=="1,2,3");//true

console.log(null==undefined);//true

console.log(NaN==NaN);//false

console.log([]==[]);//false

console.log([]==![]);//true

console.log({}=="[object Object]")//true

先来说说原理,当两边数据类型不一样时,会进行类型转化,null,undefined,NaN是三个特殊的东东,要记住它们,然后我们上一张图来解释一下吧

这是五种基本数据类型再加一个object,我们来看看它们之间比较到底是怎么做的。学过数学的都知道,一共有15种情况,下面我们一种一种来分析

1.number--boolean

除了1和0能分别转化为true和false之外,其余既不等于true,也不等于false,是我自己实验的,嘿嘿.

2.number--object

首先调用object.toString()方法,然后再调用Number()方法,将字符串转化为number,除了数组,基本上是不可能相等了。

3.number--undefined

直接不等于

4.number--string

string调用Number()方法,再跟number比较

5.number--null

直接不等于

6.boolean--object

这里要分一下数组和非数组,非数组既不等于true,也不等于false,数组会先调用toString(),然后再调用Boolean()方法,然后再跟boolean比较。

7.boolean--undefined

undefined既不等于true,也不等于false

8.boolean--string

string调用Number,然后再比较,回到第一种情况

9.boolean--null

null既不等于true,也不等于false

10.object--undefined

直接不等于

11.object--string

调用object的toString()方法,再比较

12.object--null

直接不等于,除了null等于null

13.undefined--string

直接不等于

14.undefined--null

等于

15.string--null

直接不等于

其实说了这么多,可以用一张图来提炼精髓:

说完了==号,我们再来看看if,其实if这种情况有很多,比如三元,比如||,&&等,都会存在转化为boolean值的时候,这个时候的规则又是怎样的呢?

直接上false的情况,除了false的其余就是true了.

null,undefined,0,"",NaN   除了这些其余的基本上就是true了。

这下我们再来看看上面的题:

console.log("123"==123);//true    直接调用Number()

console.log([1,2,3]==123);//false   [1,2,3].toString()后等于"1,2,3",再调用Number("1,2,3")后变成NaN,当然不等了

console.log([1,2,3]=="1,2,3");//true  这个上面解释了

console.log(null==undefined);//true

console.log(NaN==NaN);//false   这个记住

console.log([]==[]);//false   类型相同,比较指针位置

console.log([]==![]);//true   //首先![]为false,因为在if中,[]为true,然后是比较[]==false,[]先调用toString变成"",然后调用Number("")变成0,0可以变成false。

console.log({}=="[object Object]")//true   这个不用解释了吧,调用toString()变成[object Object]

好了,还是要多分析才能记住问题呀,嘿嘿。

时间: 2024-10-18 04:28:12

说说js的==运算符和if语句的相关文章

js中的运算符和条件语句

js中的运算符大体上可以分为4类:1算术运算符.2一元操作符.3比较运算符.4逻辑运算符. 算术运算符一般指的是加减乘除求余这五种操作符:+,-,*,/,%.通过算术运算符可以对js中的变量进行操作.如: var a=100,b,c,d,e,f; b= a+10; //110 c=a-10; //90 d=a*10; //1000 e=a/10; //10 f=a%3; //1 一元操作符指的是只能操作一个值的操作符:如i++,i--,++i,--i;在这里要注意区别i++与++i: var a

【js知识点】js三元运算符

js三元运算符知识点: 可以嵌套 可使用()将多个语句包围 中间不能使用 ; 和 var 等字符 在写插件时,为了压缩代码使用较多 实例: 1>2?alert("a"):(alert("b"),2>3?alert("c"):alert("d")); alert("e"); //b d e 2>1?alert("a"):(alert("b"),2>

Java基本知识(运算符/选择结构语句/循环结构语句/方法/标识符)

Java基本知识(运算符/选择结构语句/循环结构语句/方法/标识符)一.Java标识符给类.接口.方法等命名的字符序列.1.标识符组成(1)英文字母大小写:(2)数字(不能以数字开头):(3)$和_.2.命名规则常量:每个单次字母均大写,若由多个单词组成,则每个单词间用下划线隔开.变量.方法:第一个单词全部小写,若由多个单词组成,则第一个单词全部小写,从第二个单词开始,每个单词首字母大写其他单词首字母小写.包:所有字母都小写,多级包采用域名反写,每级用"."隔开.类.接口:每个单词首字

JS三元运算符

JS三元运算符 三元运算符: 如名字表示的三元运算符需要三个操作数. 语法是 条件 ? 结果1 : 结果2;. 这里你把条件写在问号(?)的前面后面跟着用冒号(:)分隔的结果1和结果2.满足条件时结果1否则结果2. <script type="text/javascript"> var b=5; (b == 5) ? a="true" : a="false"; document.write(" ---------------

如何通过JS调用某段SQL语句

如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? 解决思路 实现这个功能,首先需要了解Finereport内置的公式,SQL函数,这个肯能大家都懂,就不做介绍了. 调用FineRepor的内置公式:FR.remoteEvaluate("具体公式"),返回值为:这个具体公式的结果. 例如:var a = FR.remoteEvaluate(

js基础——运算符

爱创课堂前端培训--js基础 运算符 一.运算符 运算符(Operators,也翻译为操作符),是发起运算的最简单形式. 分类:(运算符的分类仁者见智,本课程进行一下分类.) 数学运算符(Arithmetic operators) 比较运算符(Comparison operators) 逻辑运算符(Logical operators) 赋值运算符(Assignment operators) 按位运算符(Bitwise operators) 条件 (三元) 运算符(Conditional oper

js扩展运算符

js扩展运算符(spread)是三个点 作用:将一个数组转为用逗号分隔的参数序列. 原文地址:https://www.cnblogs.com/zxyzm/p/10647963.html

JS一周游~(基础、运算符、条件语句)

一.基础篇 JavaScript 基于浏览器(客户端).基于(面向)对象{没有继承}.事件驱动(要有对象).脚本语言(灵活多变) 1.作用 表单的验证,减轻服务端的压力 添加页面动画效果 动态更改页面内容 Ajax网络请求( 异步 js and xml)无跳转刷新 2.组成部分 ECMAScript语法标准 语法,变量.数据类型,运算符,逻辑控制语句 ,关键字.保留字,对象 DOM文档对象类型操作 BOM文档对象类型操作 JS的执行原理 前台向服务器发起请求,请求服务器给我们数据,然后返回到前台

js中的&amp;&amp; ||运算符与if语句

这种&&.||运算符来写if语句在某些人口中也被称为是短路写法.最初在网上学习这种写法时,看到了一个例子: var add_level = 0; if(add_step == 5){ add_level = 1; } else if(add_step == 10){ add_level = 2; } else if(add_step == 12){ add_level = 3; } else if(add_step == 15){ add_level = 4; } else { add_l