鸿蒙应用开发-JS晦涩技术点

这篇文章主要搜集一些精品文章进行总结,方便自己增长知识和日后复习

ECMA规范

js中==和===的区别

=== 严格相等,会比较两个值的类型和值
== 抽象相等,比较时,会先进行类型转换,然后再比较值

绝大多数场合应该使用 === ,只有检测 null/undefined 的时候可以使用 x == null

=== 严格相等判断逻辑

  1. 如果Type(x)和Type(y)不同,返回false
  2. 如果Type(x)和Type(y)相同
  • 如果Type(x)是Undefined,返回true
  • 如果Type(x)是Null,返回true
  • 如果Type(x)是String,当且仅当x,y字符序列完全相同(长度相同,每个位置上的字符也相同)时返回true,否则返回false
  • 如果Type(x)是Boolean,如果x,y都是true或x,y都是false返回true,否则返回false
  • 如果Type(x)是Symbol,如果x,y是相同的Symbol值,返回true,否则返回false
  • 如果Type(x)是Number类型
    • 如果x是NaN,返回false
    • 如果y是NaN,返回false
    • 如果x的数字值和y相等,返回true
    • 如果x是+0,y是-0,返回true
    • 如果x是-0,y是+0,返回true
    • 其他返回false

== 相等判断逻辑

  1. 如果Type(x)和Type(y)相同,返回x===y的结果
  2. 如果Type(x)和Type(y)不同
  • 如果x是null,y是undefined,返回true
  • 如果x是undefined,y是null,返回true
  • 如果Type(x)是Number,Type(y)是String,返回 x==ToNumber(y) 的结果
  • 如果Type(x)是String,Type(y)是Number,返回 ToNumber(x)==y 的结果
  • 如果Type(x)是Boolean,返回 ToNumber(x)==y 的结果
  • 如果Type(y)是Boolean,返回 x==ToNumber(y) 的结果
  • 如果Type(x)是String或Number或Symbol中的一种并且Type(y)是Object,返回 x==ToPrimitive(y) 的结果
  • 如果Type(x)是Object并且Type(y)是String或Number或Symbol中的一种,返回 ToPrimitive(x)==y 的结果
  • 其他返回false

SameValueNonNumber(x,y) : 计算非数字类型x,y是否相同

  • 断言:Type(x)不是Number类型
  • 断言:Type(x)和Type(y)不同
  • 如果Type(x)是Undefined,返回true
  • 如果Type(x)是Null,返回true
  • 如果Type(x)是String,当且仅当x,y字符序列完全相同(长度相同,每个位置上的字符也相同)时返回true,否则返回false
  • 如果Type(x)是Boolean,如果x,y都是true或x,y都是false返回true,否则返回false
  • 如果Type(x)是Symbol,如果x,y是相同的Symbol值,返回true,否则返回false
  • 如果x和y是同一个对象值,返回ture,否则返回false

ToPrimitive(x) : 将x转换为原始值

js中的原始类型:

  • Null: null值.
  • Undefined: undefined 值.
  • Number: 所有的数字类型,例如0,1,3.14等 以及NaN, 和 Infinity.
  • Boolean: 两个值true和false.
  • String: 所有的字符串,例如'abc'和''.
    其他的都是'非原始'的,像Array,Function,Object等。

注意:typeof null 得到的结果是object。这里是由于js在最初的设计的问题。但其实null应该是属于原始类型的。

相关推荐
阿珊和她的猫1 小时前
`require` 与 `import` 的区别剖析
前端·webpack
谎言西西里1 小时前
零基础 Coze + 前端 Vue3 边玩边开发:宠物冰球运动员生成器
前端·coze
努力的小郑1 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
GIS之路2 小时前
GDAL 实现数据空间查询
前端
OEC小胖胖2 小时前
01|从 Monorepo 到发布产物:React 仓库全景与构建链路
前端·react.js·前端框架
2501_944711432 小时前
构建 React Todo 应用:组件通信与状态管理的最佳实践
前端·javascript·react.js
困惑阿三3 小时前
2025 前端技术全景图:从“夯”到“拉”排行榜
前端·javascript·程序人生·react.js·vue·学习方法
苏瞳儿3 小时前
vue2与vue3的区别
前端·javascript·vue.js
weibkreuz4 小时前
收集表单数据@10
开发语言·前端·javascript
hboot4 小时前
别再被 TS 类型冲突折磨了!一文搞懂类型合并规则
前端·typescript