gpt4 book ai didi

javascript - 将数值与对象相加

转载 作者:行者123 更新时间:2023-11-28 13:19:34 25 4
gpt4 key购买 nike

谁能解释一下,当我添加带有数值的对象类型变量时会发生什么?

我在 Chrome 开发控制台中执行了以下操作:

> //Denotes input in dev console
< //Denotes output


> var a={};
< undefined
> a
> Object {}
> a=a+1;
< "[object Object]1"
> a
< "[object Object]1"
> b=2
< 2
> a+b
< "[object Object]12"

另请注意,括号内的第一个是小写的o对象,第二个是大写的O对象。谢谢。

最佳答案

JavaScript 和混合类型操作的规则非常复杂,并且取决于操作,例如对于 + ,极其简化的描述是:

  • 如果两者都是数字,则执行算术和
  • 如果两者中的任何一个不是数字,则两者都将转换为字符串并执行连接

对象的字符串转换(除非您定义了要执行的操作)只是“[object Object]”,这解释了您在问题中描述的结果。

请注意,这并不是全部事实...事情要复杂得多,完整的描述需要像 .toValue 成员、Date 对象的特殊情况和很快。此外,随着时间的推移,事情变得越来越复杂(例如,ES6 行为需要引入诸如“exoticToPrim”和“OrdinaryToPrimitive”之间的区别之类的概念)。

不幸的是,我不是在开玩笑。

如果您想更好地理解,请在编写测试程序时注意,您不能信任 == 运算符来检查结果是什么,因为该相等运算符的规则更加复杂(边界实际上,完全是疯狂的)。 Javascript 中的 == 只是一个隐藏错误的庇护所,不应该在任何代码中占有一席之地(如果奇怪的是,您确实想要它的功能,那么明确地实现该行为并评论为什么需要它,而不是只需使用==)。

始终使用===

关于javascript - 将数值与对象相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com