我正在测试一些 JavaScript 概念,并试图了解原因:
typeof({} + {})
typeof([] + [])
返回一个“字符串”:
typeof {}
typeof []
返回一个“对象”
我已经在 NodeJS、FireFox、Chrome 和 IE9 中尝试过,结果都一样。
我正在测试一些 JavaScript 概念,并试图了解原因:
typeof({} + {})
typeof([] + [])
返回一个“字符串”:
typeof {}
typeof []
返回一个“对象”
我已经在 NodeJS、FireFox、Chrome 和 IE9 中尝试过,结果都一样。
运算符被+
定义为连接字符串或添加数字。如果您尝试其他方法,则必须先将操作数转换为字符串或数字。看起来这里首选字符串。
您可以通过分别定义函数string
和对象来控制返回的内容number
.toString
.valueOf
您不能使用 + 运算符连接或“添加”数组或对象。
如果您添加两个对象,它们的字符串表示将被连接起来。
运算符尝试将+
操作数强制为通用类型。在这种情况下,类型是字符串,因为添加对象或数组没有任何意义。
从+
操作员文档中:
如果 Type(lprim) 是 String 或 Type(rprim) 是 String,则返回作为连接 ToString(lprim) 后跟 ToString(rprim) 的结果的 String
由于对象的默认值为字符串(空字符串,在空对象的情况下),因此操作的返回值为'' + '' => ''
.
如果您关心内部结构,请参阅+
运算符、ToPrimitive
和对象的ECMAScript 文档。DefaultValue