分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

JS中的“==”与强制类型转换

发布时间:2023-09-06 02:02责任编辑:董明明关键词:暂无标签

JavaScript中有“==”与“===”,那么他们有何区别呢?

对于基本数据类型, ===  (!==)只有当两个变量的类型和值都相等时,才返回true;而 == (!=)则会对变量进行强制类型转换,只要转换后的值相等,则换回true。

下面结合代码讲一下在转换不同的数据类型时,相等 == 和不相等 != 操作符遵循的强制转型基本规则

1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值:false转换为0,而true转换为1;

false == 0 ??//truetrue == 1 ??//truetrue == 3 ??//false

2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

"123" == 123 ??//true

3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueof ()方法,用得到的基本类型值按照前面的规则进行比较;

var a = [ 1 , 2 , 3 ]alert(a == "1,2,3") ??//true, a.valueOf()为"1,2,3"

需要注意的是:

a. null和undefined是相等的,null和undefined不能转换成其他任何值;

null == undefined ??//trueundefined == 0 ??//falsenull == 0 ??//falseundefined == false ??//falsenull == false ??//false

b. 如果有一个操作数是NaN,则相等操作符 == 返回false,而不相等操作符 != 返回true。

tips:即使两个操作数都是NaN,相等操作符 == 也返回false;因为按照规则, NaN不等于NaN。

NaN == NaN ??//falseNaN != NaN ??//trueNaN == 0 ??//false

c. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。

var obj = new Object()var obj1 = new Object()var obj2 = objalert(obj == obj1) //falsealert(obj == obj2) //truealert(obj === obj1) //false

那么除此之外,还有什么情况下JS代码需要对变量进行强制转型呢?

  1. 字符串拼接时:

var a = 1 + 1 ??// 2var b = 1 + "1" ??//11

  2. if语句判断时:

if(100){ ???alert(100) ??//会执行}if(!0){ ???alert(0) ??//不会执行}if(!null){ ???alert(null) ??//不会执行}if(!undefined){ ???alert(undefined) ??//不会执行}

  3. 逻辑运算符

alert(100 && 0) ??//0alert(‘‘ || ‘ab‘) ??//‘ab‘alert(!0) ??//truealert(!!100) ??//true

  PS: && (逻辑与)和 || 这两逻辑运算符不一定返回布尔值,且都遵循着短路原则。明天单独写一篇随笔好了~

那么我们什么时候使用 == 什么时候使用 === 呢?

  答:由于相等 == 和不相等操作符!= 存在类型转换的问题,为了保持代码中数据类型的完整性,红宝书推荐我们尽量使用全等 === 和不全等 != 操作符。而JQuery中有一种这样的写法:

if(obj.a == null){ ???//相当于 obj.a === null || obj.a === undefined的简写形式}

除此之外,我们全部使用 ===。

如有错误,欢迎指出探讨。

JS中的“==”与强制类型转换

原文地址:https://www.cnblogs.com/YiNongLee/p/9261153.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved