首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Javascript中`({}+{}+{}*2).length`会返回33?

在JavaScript中,({}+{}+{}*2).length会返回33的原因是因为运算符的优先级和操作顺序导致的。

首先,{}表示一个空的对象。当两个对象相加时,JavaScript会尝试将它们转换为字符串并进行拼接。由于对象不能直接转换为字符串,因此会调用它们的toString()方法。但是空对象的toString()方法返回的是"[object Object]",所以两个空对象相加结果为"[object Object][object Object]"

接着,{}*2会被解释为NaN(非数值)。在JavaScript中,当对一个对象执行算术运算时,会尝试将对象转换为数字。由于空对象不能被转换为数字,所以乘法运算的结果是NaN

最后,({}+{}+{}*2)中的括号用于确定运算的顺序。根据运算符的优先级,乘法运算会先于加法运算。所以表达式的计算顺序是先计算{}*2得到NaN,然后再将{}+{}+NaN相加,得到"[object Object][object Object]NaN"

最后的.length表示获取字符串的长度,所以最终结果为33。

总结起来,({}+{}+{}*2).length返回33是因为空对象通过toString()方法转换为字符串后,进行了字符串拼接和算术运算(乘法)的操作。但是需要注意的是,这样的操作并不是开发中常用的实践,因为它很容易导致代码的可读性和维护性降低。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS学习笔记 (四) 数组进阶

1、数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始。 2、数组是无类型的。数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素可以是对象或其它数组。 3、数组是动态的,数组长度可长可短。在创建数组时无须声明一个固定的大小或者在数组大小变化时无须重新分配空间 4、数组可以是稀疏的。数组元素的索引不一定是连续的,它们之间可以有空缺,每个数组都有一个length属性,针对非稀疏数组,该属性就是数组元素的个数,针对稀疏数组,length比实际元素个数要大。 5、JavaScript数组是JavaScript对象的特殊形式。数组索引可以认为是整数的属性名。 6、数组继承自Array.prototype中的属性。它定义了许多的方法,它们对真正的数组和类数组对象都有效。如,字符串、arguments等。

01
领券