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

javascript中==的数据类型转换规则

  1. 如果只有一个值,判断这个值是真还是假,遵循只有0, NaN, "", null, undefined这五个是假, 其余都是真

  2. 如果是两个值比较是否相等, 遵循这个规则: val1 == val2 两个值可能不是同一个数据类型的, 如果是==比较的话,会进行默认的数据类型转换
    1) 对象==对象, 永远不相等: 如 '[] == [] // false' '({} == {}) // false'

    (function fn(){} == function() {}) // false

2) 对象== 字符串, 先将对象转换成字符串(调用toString()方法),然后再进行比较. )例如:

[] == ""  //true,  执行了[].toString()
({}) == ""  // false
({}.toString())  // "[object Object]"
[].toString(); // ""

3) 对象== 布尔类型, 对象先转换为字符串(toString()),然后把字符串转换为数字(Number() "" --> 0), 布尔类型也转换为数字(true是1, false是0); 最后让两个数字比较

Number('') // 0
[] == false // true

4) 对象 == 数字 对象先转换为字符串(toString()),然后把字符串转换为数字(Number()), // []--->""--->0
5) 数字 == 布尔 布尔转换为数字(Number()), true是1, false是0
6) 数字 == 字符串 字符串转换为数字
7) 字符串 == 布尔 都转换为数字
8) null == undefined 结果是true
9) null或undefined和其它任何数据类型都不相等
10) NaN和任何东西都不相等

除了==是比较, ===也是比较(绝对比较), val1和val2 如果数据类型不一样,肯定不相等.

总之==的数据类型转换的大体思路就是: 能转字符串就转字符串, 还不够就转数字啦...所以[]==![]返回true, 就是因为这其实是一个对象类型和布尔类型比较; 两边转数字以后都是0.

实践中这些数据转换的规律并没有什么大用, 判等的时候应当尽量都用===以避免数据类型转换, 仅在判断null和undefined的时候可以用==.

顺便还有javascript中的运算符优先级...从高到低大体上是:

  1. 一元运算符(求反, 逻辑非(!), 转数字(+),++, --),typeof, delete优先级最高;
  2. 乘除/求模;
  3. 加减;
  4. =, <=, >, <, instance of;

  5. 判等运算符(==, ===, !=, !==);
  6. &&;
  7. 带有赋值的,优先级最低(=, +=, -=...)

转载于:https://www.cnblogs.com/supersylph/p/4643934.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入了解java同步、锁紧机构
  • 自己的自定义单元格(IOS)
  • 第一部分:HTTP协议之请求和响应
  • 移动开发下Xamarin VS PhoneGap
  • c++中new分配动态数组
  • U盘安装ubuntu server 14.04
  • 【iOS】FMDB封装,查询自动mapping
  • idea创建maven-archetype-webapp项目无java目录
  • JavaScript入门篇 第三天(认识DOM)
  • 观察者模式详解
  • 关于华为云的六大猜想
  • postgresql9.5 物化视图测试
  • UVA 10529 Dumb Bones 可能性dp 需求预期
  • POJ 1679 The Unique MST
  • 批处理文件中获取当前所在路径的几种方法
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【前端学习】-粗谈选择器
  • go语言学习初探(一)
  • java中具有继承关系的类及其对象初始化顺序
  • php ci框架整合银盛支付
  • Redis学习笔记 - pipline(流水线、管道)
  • VuePress 静态网站生成
  • 后端_MYSQL
  • 警报:线上事故之CountDownLatch的威力
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 区块链将重新定义世界
  • 算法-图和图算法
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 新书推荐|Windows黑客编程技术详解
  • 用element的upload组件实现多图片上传和压缩
  • 用Python写一份独特的元宵节祝福
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • !!java web学习笔记(一到五)
  • $.each()与$(selector).each()
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)图像的%2线性拉伸
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (译)2019年前端性能优化清单 — 下篇
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)母版页和相对路径
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8 跨平台高性能边缘采集网关
  • .Net core 6.0 升8.0
  • .NET 发展历程
  • .NET 中创建支持集合初始化器的类型
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET框架
  • ::
  • @angular/cli项目构建--Dynamic.Form
  • @SpringBootApplication 注解
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成