JS隐式转换_隐式转换是什么

JS隐式转换_隐式转换是什么在什么条件下会触发隐式转换机制?在进行比较运算,或者进行四则运算时,常常会触发JS中的隐式转换机制。首先要记住JS设计者的初衷是美好的,他希望==是美好的操作选择,但是在美好的希望也是希望。小案例为什么[]==false?类型不同比较时,需要先做类型转换,==比较时有布尔值参与时,需要比较双方均转为数字,[]是非原值,需要转换为原值二者才能进行比较,大部分对象转换为…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在什么条件下会触发隐式转换机制?

在进行比较运算,或者进行四则运算时,常常会触发JS中的隐式转换机制。

首先要记住JS设计者的初衷是美好的,他希望 == 是美好的操作选择,但是在美好的希望也是希望。

小案例

  1. 为什么 [] == false ?

    类型不同比较时,需要先做类型转换,==比较时有布尔值参与时,需要比较双方均转为数字,[ ]是非原值,需要转换为原值二者才能进行比较,大部分对象转换为原值最后都是调用的toString方法,[] –> toString() —> ‘’,当字符串和数字比较时,会把字符串转换为数字,而空字符串转换为数字结果是0,而 0 == 0,所以结果为true

  2. 为什么NaN !== NaN?

    这是隐式转换的一个很大的弊端,es6的includes方法可以检测出NaN等于NaN,这是一大进步

  3. null == 0 结果为false

    这时候两边的类型也不同,但是却没有做类型转换,why?因为这时候二者都已经是基本数据类型了,没有办法在进行转换了,所以二者的类型都不可能相同,结果自然为false

  4. 为什么null == undefined 结果为true

    这是一种规定
    if x is null and y is undefined, return true
    if y is null and x is undefined, return true

  5. 为什么 !![] = true

    这里并没有涉及 == 比较,只需要判断 [] 是true还是false即可

注意,字符串转换为数字调用的是Number方法,NaN也是数字,某些方面来说布尔类型也属于一种int类型

隐式转换的最大弊端

NaN不等于NaN

几种为false的情况,只要不是这几组值,结果均为true

0,’’,NaN,false,null,undefined

涉及隐式转换最多的两个运算符

+ ,==

三种隐式转换

1、将值转为原始值
2、将值转为数字
3、将值转为字符串

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183231.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C# 网络编程之豆瓣OAuth2.0认证具体解释和遇到的各种问题及解决

    C# 网络编程之豆瓣OAuth2.0认证具体解释和遇到的各种问题及解决

    2021年11月23日
    44
  • MATLAB–相机标定教程

    MATLAB–相机标定教程对相机标定原理不熟悉的同学可以参考张正友标记法的译文MATLAB:2014a待标记图像:http://download.csdn.net/detail/heroacool/9477530应用程序下找到CameraCalibration工具箱加载待标定的图像填写棋盘格每个格子边长的真实值可以预览成功检测出棋盘格的图像,然后开始标定,点击Calibrate平均误差小于0.5即可导出相机

    2022年5月8日
    30
  • MSSQL 的QUOTENAME函数「建议收藏」

    MSSQL 的QUOTENAME函数「建议收藏」–功能:返回带有分隔符的Unicode字符串,分隔符的加入可使输入的字符串成为有效的MSSQL分隔标识符。–语法QUOTENAME(‘character_string'[,’quote_character’]) –SQL语句中的字段名,表名为关键字时,用QUOTENAME添加有效分隔符() –在动态查询中,对表名参数QUOTENAME处理,避免表名为

    2022年7月25日
    12
  • PyCharm激活码永久有效PyCharm2018.1.5激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2018.1.5激活码教程-持续更新,一步到位PyCharm激活码永久有效2018.1.5激活码教程-Windows版永久激活-持续更新,Idea激活码2018.1.5成功激活

    2022年6月19日
    21
  • 使用burpsuite抓包和改包[通俗易懂]

    使用burpsuite抓包和改包[通俗易懂]第一次使用到这个工具,是在上web安全课的时候,老师让我们进行CTF实验,采用burpsuite进行抓包改包,才发现这个工具的强大。1burpsuite工具下载官网链接:https://portswigger.net/burp/下载之后直接安装即可,比较简单2建立burpsuite和浏览器的连接打开burpsuite工具,在proxy中的Option下,看到对应的Interface…

    2022年6月1日
    224
  • linux某用户 计划任务,Linux计划任务管理

    linux某用户 计划任务,Linux计划任务管理Linux计划任务管理前言:在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、cronie软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。一、at命令一次性计划任务前提条件:对应的系…

    2022年7月13日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号