夜殇-染墨 2023-02-23 14:41 采纳率: 100%
浏览 54
已结题

JavaScript底层逻辑原理

img

```javascript

typeof NaN -> " number"
9999999999999999 -> 1000000000000000
0.5+0.1==0.6 -> true
0.1+0.2==0.3 -> false
Math.max() -> -Infinity
Math.min() -> Infinity
[]+[] -> ""
[]+{} -> : "[object object]"
{}+[] -> 0
true+true+true===3 -> true
true-true -> 0
true==1 -> true
true===1 -> false
(!+[]+[]+1[]).1ength -> 9
9+"1" -> "91"
91-"1" -> 90
[]==0 -> true

```初学,可以解释一下每条逻辑嘛

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-23 15:05
    关注

    基于Monster 组和GPT的调写:
    希望你理解:

    • typeof NaN -> "number":NaN 是 JavaScript 中一种特殊的数字值,表示不是一个数字(Not a Number)。虽然 NaN 不是真正的数字,但它属于数字类型,因此 typeof NaN 返回值为 "number"。
    • 9999999999999999 -> 1000000000000000:这是因为 JavaScript 中能精确表示的最大整数为 Number.MAX_SAFE_INTEGER,它的值为 9007199254740991。因此,9999999999999999 超出了这个范围,被近似为 10000000000000000,但是它的精度只保留了最后一位有效数字,因此最终结果为 1000000000000000。
    • 0.5+0.1==0.6 -> true:这个表达式的结果为 true。这是因为 0.1 和 0.5 在 JavaScript 中可以被精确表示,因此它们的和为 0.6,与右侧的值相等。
    • 0.1+0.2==0.3 -> false:这个表达式的结果为 false。这是因为在 JavaScript 中,0.1 和 0.2 不能被精确表示,它们的计算结果可能有微小的误差,导致它们的和与右侧的值不相等。
    • Math.max() -> -Infinity:如果 Math.max() 函数没有参数,则返回 -Infinity。这是因为没有比负无穷小更小的数字。
    • Math.min() -> Infinity:如果 Math.min() 函数没有参数,则返回 Infinity。这是因为没有比正无穷大更大的数字。
    • []+[] -> "":两个空数组相加,结果为一个空字符串。
    • []+{} -> "[object Object]":一个空数组和一个空对象相加,JavaScript 会将它们转换为字符串,因此结果为 "[object Object]"。注意,这里的 [] 实际上是一个空数组的字符串表示,而不是真正的数组。
    • {}+[] -> 0:一个空对象和一个空数组相加,JavaScript 会尝试将它们转换为数字。由于空对象转换为数字的结果为 NaN,而 NaN 和任何数字相加都等于 NaN,因此最终结果为 NaN+0,即 0。
    • true+true+true===3 -> true:在 JavaScript 中,true 被转换为数字 1,因此三个 true 相加的结果为 3。比较 3 和 3 相等,结果为 true。
    • true-true -> 0:在 JavaScript 中,true 被转换为数字 1,因此两个 true 相减的结果为 1-1,即 0。
    • true==1 -> true:在 JavaScript 中,双等号 == 进行比较时,如果两个值类型不同,则会进行类型转换。在这个例子中,true 的类型为布尔值,而 1 的类型为数字,因此 true 会被转换为数字 1,比较结果为 true。
    • true===1 -> false:在 JavaScript 中,三个等号 === 进行比较时,不会进行类型转换。因为 true 的类型为布尔值,而 1 的类型为数字,两个值类型不同,因此比较结果为 false。
    • (!+[]+[]+1[]).length -> 9:这个表达式的结果为 9。在 JavaScript 中,一个空数组转换为数字为 0,加上一个取反运算符 ! 后会变成 true,再将其转换为数字得到 1。字符串拼接时,会将数字 1 转换为字符串 "1"。因此,整个表达式的结果为字符串 "true1",其长度为 9。
    • 9+"1" -> "91":这个表达式的结果为字符串 "91"。在 JavaScript 中,数字和字符串相加时,会将数字转换为字符串,然后进行字符串拼接。
    • 91-"1" -> 90:这个表达式的结果为数字 90。在 JavaScript 中,数字和字符串相减时,会将字符串转换为数字,然后进行数值计算。
    • []==0 -> true:在 JavaScript 中,一个空数组会被转换为数字 0,因此 []==0 的结果为 true。这是因为双等号 == 进行比较时,如果两个值类型不同,则会进行类型转换,将空数组转换为数字 0 后再进行比较。但是在实际开发中,建议使用三个等号 === 进行比较,因为它不会进行类型转换,可以避免一些潜在的错误。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月23日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效