==与===的区别(JS)
两者都是判断等式两边是否相等,最大的区别就是==会进行类型的转换之后再判断两者是否相等,而===不会进行数据类型的转换,先判断两边的数据类型是否相等,如果数据类型相等的话才会进行接下来的判断,再进行等式两边值得判断,可以理解为只有等式两边是全等(数据类型相同,值相同)的时候结果才会是true,否则全为false。
==判断等式两边是否相等的情况:
(1)null、undefined和不同类型比较,都是false(null和undefined结果为true)
(2)NaN和任何数据进行比较,都是false(包括NaN和NaN相比较也为false)
(3)布尔值是转换为数字1或0再和其他数据进行比较
拓展: 不同数据转换成布尔值的结果:
console.log(Boolean('')); //falseconsole.log(Boolean({})); //trueconsole.log(Boolean([])); //trueconsole.log(Boolean(null)); //falseconsole.log(Boolean(undefined)); //falseconsole.log(Boolean(NaN)); //falseconsole.log(Boolean(Object)); //true
(4)数字和其他简单数据类型进行比较时,会尝试将其他数据类型转换成数值型再进行比较
**其他数据类型默认转数字使用的是Number()
console.log(""==false); //trueconsole.log(parseInt("")); //NaNconsole.log(Number("")); //0console.log(""==0); //true
(5)对象和其他简单数据类型进行比较的时候,会尝试使用对象的valueOf()和toString()方法将对象转换为原始值进行比较:
①对象.toString()返回值只有[ object Object ]
let obj = {name:'leon',age:18};console.log(obj.toString()); //[object Object]console.log(obj.valueOf()); //{name: 'leon', age: 18}
let obj = {};console.log(obj.toString()); //[object Object]console.log(obj.valueOf()); //{}
②数组 [ ].toString()返回值是空 其他数组.toString()返回值是字符 ,一个成员一个字符逗号分隔
let arr1=[1,2,3];console.log(arr1.toString()); //1,2,3console.log(arr1.valueOf()); //[1, 2, 3]let arr=[]; console.log(arr.toString()); //空console.log(arr.valueOf()); //[]
③其他的对象function reg 返回字符串
function fn(){console.log("你是最棒的!");}console.log(fn.toString()); console.log(fn.valueOf()); let reg = /^[^_$]\w{5,}@(163|126|qq|sina)\.(com|cn|net)$/;console.log(reg.toString()); console.log(reg.valueOf());
运行结果截图:
(6)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等
(7)-0 == +0 结果为:true
全等比较(===)不转换数据类型,数据类型和内容必须完全一致才是相等
全等比较(===)两边是否相等的情况:
(1)类型不同,一定不相等
(2)两个同为数值,并且相等,则相等;若其中一个为NaN,一定不相等
(3)两个都为字符串,每个位置的字符都一样,则相等
(4)两个同为true,或是false,则相等
(5)两个值都引用同一个对象或函数,则相等,否则不相等(引用类型地址空间可能不一样)
(6)两个值都为null,或undefined,则相等
(7*)两者同为引用类型时,必须是指向同一个引用地址才相等,否则不相等(5的补充)
(8)-0 === +0 结果为:true
==与===的区别(JS)相关推荐
- slice 和splice 的区别 js
slice 和splice 的区别js slice 定义和用法 一个参数 正数 负数 两位参数 正数 负数 splice 定义和用法 两个参数 正数 负数 单一个参数 正数 负数 今天写一道算法题时候 ...
- 几种location.href的区别 js实现网页防止被iframe框架嵌套功能 .
首先我们了解一下:window.location.href.location.href.self.location.href.parent.location.href.top.location.hre ...
- html中单引号与双引号区别,JS 和 HTML 中的单引号与双引号
JS中的单引号与双引号 HTML中的单引号与双引号很简单,就是两个字符实体: 显示 描述 实体名称 实体编号 " 双引号.引号 " " ' 单引号.撇号 ' ' x 1 ...
- HTML中id和name的区别(js中的注意事项)
但是name在以下用途是不能替代的: 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文档 ...
- 区别js中的3/2(结果1.5))与 java 中的 2/3(结果:0)
前言: 为了调试方便,昨天把一段js代码转成java代码,发现一些问题. ------------------------ js中定义变量都到var 而java中分int long double等等 ...
- php数组和链表的区别,js里链表和数组的对比
1.链表是什么 链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素: 链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列, ...
- js实现网页防止被iframe框架嵌套及几种location.href的区别
首先我们了解一下几种location.href的区别简单的说:几种location.href的区别js实现网页被iframe框架功能,感兴趣的朋友可以了解下 首先我们了解一下:window.locat ...
- day05【JQuery框架】HTML引入Jquery、jQuery与JS区别、基本选择器、层级关系选择器、属性选择器、过滤选择器、 对象遍历、Jquery的DOM操作【重点】、Jquery事件绑定
回顾 1. bom对象window对象三种弹框alert()confirm()prompt()二种定时器一次性:setTimout() --- 通过递归实现循环性循环性:setInterval()lo ...
- JS有哪些数据类型?它的特点和区别。栈和堆的是什么?数据类型之间的转换
大家好,我是IT修真院武汉分院web第17期的学员吴三水,一枚正直纯洁善良的web程序员 今天给大家分享一下,修真院官网js(职业)任务一,深度思考中的知识点--JS有哪些数据类型? 1.背景介绍 J ...
- JS中同步和异步的区别
JS中同步和异步的区别 js是一门单线程语言,所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推.如果一个任务耗 ...
最新文章
- python数据类型详解
- Rsync+inotify搭建使用
- Imageloader5-ImageLoader的变量初始化
- 波卡链Substrate (6)Babe协议三“slot leader”
- windows下cmake编译VTK到PCL中
- php 安全基础 第七章 验证与授权 密码嗅探
- 【ArcGIS微课1000例】0018:ArcGIS设置相对路径和数据源
- ajax官方api,yangguozhong
- netty发送对象消息
- 从分库分表到Database Plus,重新认知ShardingSphere
- 使用LogParser分析IIS网站日志
- idea自动导包_IDEA已经世界第一了,听说你还不会?
- mysql数据库中的分组查询语句_详解MySQL中的分组查询与连接查询语句
- mac安装教程 sqlyog_Mac开发环境配置:Homebrew的安装
- 曲面映射的算法理论基础
- ubuntu系统打开.chm文件方式
- Java高级技术FastDFS的学习
- 收发器(Transceiver)架构4——发信机1
- fiddler移动端抓取
- WINCE快捷方式结构