鸿蒙应用开发-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应该是属于原始类型的。

相关推荐
iRuriCatt14 分钟前
智慧景区管理系统 | 计算机毕设项目
java·前端·spring boot·vue·毕设
程序员清洒36 分钟前
Flutter for OpenHarmony:Icon 与 IconButton — 图标系统集成
前端·学习·flutter·华为
Yolanda941 小时前
【项目经验】钉钉免密登录实现
前端·javascript·钉钉
2601_949613021 小时前
flutter_for_openharmony家庭药箱管理app实战+药品详情实现
java·前端·flutter
We་ct2 小时前
LeetCode 15. 三数之和:排序+双指针解法全解析
前端·算法·leetcode·typescript
美狐美颜SDK开放平台2 小时前
直播场景下抖动特效的实现方案:美颜sdk开发经验分享
前端·人工智能·美颜sdk·直播美颜sdk·视频美颜sdk
草青工作室2 小时前
java-FreeMarker3.4自定义异常处理
java·前端·python
美狐美颜sdk2 小时前
抖动特效在直播美颜sdk中的实现方式与优化思路
前端·图像处理·人工智能·深度学习·美颜sdk·直播美颜sdk·美颜api
Mr Xu_2 小时前
Vue3 + Element Plus 实战:App 版本管理后台——动态生成下载二维码与封装文件上传
前端·javascript·vue.js
闻哥2 小时前
从 AJAX 到浏览器渲染:前端底层原理与性能指标全解析
java·前端·spring boot·ajax·okhttp·面试