文档章节

js 一个等号"=" 二个等号"==" 三个等号"===" 的区别

piggybear
 piggybear
发布于 2015/02/16 10:33
字数 851
阅读 10
收藏 0

一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。

=== 判断规则

如果类型不同,就[不相等] 
如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断) 
如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。 
如果两个值都是true,或者都是false,那么[相等]。 
如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。 
如果两个值都是null,或者都是undefined,那么[相等]。 
== 判断规则:

如果两个值类型相同,进行 === 比较。 
如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 
如果一个是null、一个是undefined,那么[相等]。 
如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 
如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 
如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核 心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我 也不大懂) 
任何其他组合,都[不相等]。

 

alert(0 == “”); // true
alert(0 == false); // true
alert(“” == false); // true

alert(0 === “”); // false
alert(0 === false); // false
alert(“” === false); // false

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

alert(1 == “1″); // true

alert(1 === “1″); // false

=========================================================================================

首先,== equality 等同,=== identity 恒等。 

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

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

下面分别说明: 

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

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

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

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

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

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

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

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

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

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

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

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

c、如果任一值是 true 


© 著作权归作者所有

共有 人打赏支持
piggybear
粉丝 3
博文 237
码字总数 37552
作品 0
西安
技术主管
私信 提问
小程序和Vue关于绑定数据书写上的区别

一、书写格式上 1、绑定事件 Vue: 小程序: Vue是通过:事件名字='回调函数名'。 小程序以或开头,后面跟着事件类型,例如、。自基础库版本1.5.0起,和后可以紧跟一个冒号,其含义不变,如。...

fenerchen
06/02
0
0
第12天 :布尔值和关系运算符

一、布尔值 数值型里面的值,有无穷多个,因为世界上所有的数字,都是数值型; 字符串型的值,有无穷多个,因为世界上所有的文字、语句都是字符串型; 布尔类型的值,就两个,true、false。 ...

半指温柔乐
2017/08/25
0
0
从一行等式理解JS当中的call, apply和bind

关于JS当中的call,apply和bind,相信大家和我一样,已经看过了无数篇相关的文章,都有自己的理解。所以这篇文章并非什么科普类的文章,仅仅是把我自己的理解记录下来。 我的学习习惯,是喜欢...

孟飞阳
04/20
0
0
JavaScript 的怪癖 3:标准的等号 (==)

原文:JavaScript quirk 3: normal equality (==) 译文:JavaScript 的怪癖 3:标准的等号 (==) 译者:iranw 此文是 javascript 的 12 个怪癖(quirks) 系列的第三篇。 让我们先看一个简单的...

justjavac
2013/04/28
484
8
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 对象的解构与数组有一个重要的不同。数组的元素是按次序...

JandenMa
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

进程管理利器Supervisor--centos7下安装与卸载

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用在线安装,...

java_龙
13分钟前
2
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
14分钟前
1
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
16分钟前
2
0
numpy常用操作

水平合并数组 import numpy as npa = [1,2,3]b = [4,5,6]np.hstack((a,b))# array([1, 2, 3, 4, 5, 6])c = [a,['a','b','c']]d = [b,['d','e','f']]np.hstack((c,d))#array([['1'......

datadev_sh
33分钟前
4
0
四种检测异常值的常用技术简述

摘要: 本文介绍了异常值检测的常见四种方法,分别为Numeric Outlier、Z-Score、DBSCAN以及Isolation Forest 在训练机器学习算法或应用统计技术时,错误值或异常值可能是一个严重的问题,它们...

阿里云官方博客
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部