当前位置: 首页 > news >正文

JS数据类型的转换规则

数据类型转换的规则

  • 1 如果只有一个值,判断这个值是真还是假,遵循只有0,NaN,'',null,undefined这五个是假的,其余的都是真
  • 2 如果是两个值比较是否相等,遵循以下规则:
    • ![]->false
    • []==[]->false
    • //val==val 两个值可能不是同一个数据类型的,如果是两个等于号比较的话,会默认的进行数据类型转换
    • 规则:
      • 1 对象==对象 永远不相等
      • 2 对象==字符串
        • 先将对象转换成字符串(调用toString的方法),然后再进行比较
          • []空数组转化为字符串是''
          • {}转化为字符串"[object,objec]"
      • 3 对象==布尔类型
        • 对象先转化字符串(toString方法),然后再把字符串转化为数字(Number,""空字符串为0) ,布尔类型也转化为数字(true是1,false是0),最后让两个数字比较[]==false->true
      • 4 对象==数字
        • 先将字符串转化为字符串(toString), 然后把字符串再转化为数字(Number),然后再进行比较
      • 5 数字==布尔
        • 将布尔转化为数字
      • 6 数字==字符串
        • 字符串转化为数字
      • 7 字符串==布尔
        • 都转化为数字
      • 8 null==undefined 结果为true;
      • 9 null或者undefined 和其他任何的数据类型比较都不相等
  • 3 除了==是比较,===也是比较(绝对比较)
    • val === val2 比较的是数据类型,如果数据类型不一样肯定不相等

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

两个值进行比较,如果数据类型不一样的话,会进行默认的数据类型转换

->对象 == 对象:比较的是各自代表的内存地址,地址相同则相等,地址不同则不相等

->对象 == 数字:先把对象toString,然后把结果再Number,最后和数字比较

->对象 == 字符串:先把对象toString,然后再比较

->对象 == 布尔:都转换成数字

->字符串 == 数字:字符串转换成数字

->字符串 == 布尔:都转换成数字

->布尔 == 数字 :布尔转换成数字

->null == undefined是相等的,它们和自身也是相等的,除此之外和其他任何值都不想等

->NaN == NaN是不相等的

把一个值转化成布尔类型:!、!!、Boolean、if(num)条件的意思也是先把num转换成布尔值验证真假

->只有''、0、NaN、null、undefined代表false,其余的都是true

![] == false:两个==判断的优先级是最低的,它肯定是先把左右两边的表达式执行,执行的结果再进行比较

![]转换成布尔再取反 ->false =>true

转载于:https://www.cnblogs.com/Scar007/p/7651678.html

相关文章:

  • BusyBox ifup udhcpc后台运行
  • JavaScript:综合案例---房贷计算器的实现
  • Kubernetes的ConfigMap说明
  • 显示高德地图及蓝点
  • Android短轮询解决方案——CountDownTimer+Handler
  • ORACLE 11G 搭建dataguard详细步骤(所有操作总结)
  • 最新微信支付配置流程说明
  • offsetHeight,clientHeight,scrollHeight,offsetY等属性的理解
  • 测试等级划分
  • 对自组织的实验
  • Oracle ORA-01940: 无法删除当前连接的用户
  • XlsToOra
  • CTF---密码学入门第一题 这里没有key
  • mysql sql语句大全(MySQL语句 整理一)
  • 一张大图看懂Mvc启动过程
  • 03Go 类型总结
  • 0x05 Python数据分析,Anaconda八斩刀
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Laravel 中的一个后期静态绑定
  • Mybatis初体验
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • PAT A1092
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • vue的全局变量和全局拦截请求器
  • webpack+react项目初体验——记录我的webpack环境配置
  • 码农张的Bug人生 - 见面之礼
  • 区块链技术特点之去中心化特性
  • 新手搭建网站的主要流程
  • gunicorn工作原理
  • hi-nginx-1.3.4编译安装
  • kubernetes资源对象--ingress
  • scrapy中间件源码分析及常用中间件大全
  • ​2021半年盘点,不想你错过的重磅新书
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ###C语言程序设计-----C语言学习(3)#
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)nginx 安装、启停
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (五)c52学习之旅-静态数码管
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 简介:跨平台、开源、高性能的开发平台
  • /boot 内存空间不够
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [C++]:for循环for(int num : nums)
  • [CTF]2022美团CTF WEB WP
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [hdu 1247]Hat’s Words [Trie 图]