浅谈JS中的!=、== 、!==、===的用法和区别


Posted in Javascript onSeptember 24, 2016
var num = 1; 
  
var str = '1'; 
  
var test = 1; 
  
test == num  //true 相同类型 相同值 
  
test === num //true 相同类型 相同值 
  
test !== num //false test与num类型相同,其值也相同, 非运算肯定是false 
  
num == str  //true  把str转换为数字,检查其是否相等。 
  
num != str  //false == 的 非运算 
  
num === str //false 类型不同,直接返回false 
  
num !== str //true  num 与 str类型不同 意味着其两者不等 非运算自然是true啦

== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

=== 和 !== 只有在相同类型下,才会比较其值。
 
首先,== equality 等同,=== identity 恒等。

==, 两边值类型不同的时候,要先进行类型转换,再比较。

===,不做类型转换,类型不同的一定不等。

下面分别说明:

先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等:

1、如果类型不同,就[不相等]

2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断)

3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。

4、如果两个值都是true,或者都是false,那么[相等]。

5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。

6、如果两个值都是null,或者都是undefined,那么[相等]。

再说 ==,根据以下规则:

1、如果两个值类型相同,进行 === 比较。

2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:

a、如果一个是null、一个是undefined,那么[相等]。

b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。

c、如果任一值是 true ,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。

d、如果一个是对象,另一 个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试 valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我也不大懂)

e、任何其他组合,都[不相等]。

举例:

"1" == true

类型不等,true会先转换成数值 1,现在变成 "1" == 1,再把"1"转换成 1,比较 1 == 1, 相等。

= 赋值运算符
== 等于
=== 严格等于

例:
var a = 3;
var b = "3";

a==b 返回 true
a===b 返回 false

因为a,b的类型不一样

===用来进行严格的比较判断

var data = ({"val":"7","flag":"true"});
<FONT face=Verdana></FONT>

下面需要如何判断flag的值?

因为true加双引号==推测是字符串true

如果不加双引号===就是布尔值true

这个很重要,之前我一直没有搞清楚这一点

写法1

if(data.flag=true){…}else{..}

这样写怎么都是正确的,根本得不到else的值,原因是这种写法相当于

if(true){…}

写法2

if(data.flag==true){…}else{..}

没有这种写法

写法3

if(data.flag='true'){…}else{..}

这样写怎么都是正确的,根本得不到else的值,原因是这种写法相当于

if(true){…}

写法4

if(data.flag=='true'){…}else{..}

这个才是正确的写法

“=”:这个表示赋值,不是表示运算符

“==”:表示等于(值)

“===”:表示全等于(类型和值)

以上就是小编为大家带来的浅谈JS中的!=、== 、!==、===的用法和区别的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

Javascript 相关文章推荐
用js重建星际争霸
Dec 22 Javascript
JSQL 批量图片切换的实现代码
May 05 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
May 27 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
Jul 27 Javascript
jQuery实现磁力图片跟随效果完整示例
Sep 16 Javascript
基于jQuery实现一个marquee无缝滚动的插件
Mar 09 Javascript
js时间戳与日期格式之间转换详解
Dec 11 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
javascript实现遮罩层动态效果实例
May 14 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
Sep 24 #Javascript
浅谈js常用内置方法和对象
Sep 24 #Javascript
js原生跨域_用script标签的简单实现
Sep 24 #Javascript
js内置对象处理_打印学生成绩单的简单实现
Sep 24 #Javascript
用js实现简单算法的实例代码
Sep 24 #Javascript
jQuery实现移动端手机商城购物车功能
Sep 24 #Javascript
AngularJS实现星星等级评分功能
Sep 24 #Javascript
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
基于php使用memcache存储session的详解
2013/06/25 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php实现Session存储到Redis
2015/11/11 PHP
javascript 禁止复制网页
2009/06/11 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
python中reload重载实例用法
2020/12/15 Python
机械设计制造专业个人求职信
2013/09/25 职场文书
优秀经理获奖感言
2014/03/04 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
烈士陵园观后感
2015/06/08 职场文书
农村婚庆主持词
2015/06/29 职场文书
感谢师恩主题班会
2015/08/17 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB