首页
学习
活动
专区
工具
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()方法转换为字符串后,进行了字符串拼接和算术运算(乘法)的操作。但是需要注意的是,这样的操作并不是开发中常用的实践,因为它很容易导致代码的可读性和维护性降低。

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

相关·内容

全网最全的,最详细的,最友好的 Typescript 新手教程

现在我们要记住,TypeScript是一种特殊的JavaScript,但在浏览器运行之前,它需要一个“转换器”。 TypeScript新手教程:为什么是TypeScript?...一开始,你不会完全理解TypeScript为什么有意义,毕竟它在变成JavaScript代码之前已经被剥离了。你问:“TypeScript有什么用?”这是个好问题,我的朋友。...为什么如此?TypeScript不只是一种语言吗?种。TypeScript还有一个二进制代码,可以把TypeScript代码编译成JavaScript代码。记住,浏览器并不理解TypeScript。...每个JavaScript类型都有一个对应的表示,可以在我们的代码中使用,比如字符串和数字: var name = "Hello John"; var age = 33; JavaScript的“问题”...总之,我跳过了TypeScript的另一个有用特性:函数的返回类型。 要理解为返回值添加类型注释为什么很方便,请想象一下我正在摆弄您的奇特函数。

6K40

百度站长关键词排名为什么带小数等流量与关键词工具2个常见问题解答

Q1:关键词排名为什么带小数?...A1:在热门关键词和热门页面列表给出的排名是平均排名,表示在相应的时间段内,用户在搜索某个关键词时,落地页在百度搜索结果页的平均排名,所以才会出现带小数的情况。...b.html 第20位 那么www.123.com在“北京”这个关键词下的排名值计算方式便是(1+4+20)/3=8.3 另外还有一点大家要注意一下,我们在统计排名时,推广结果、阿拉丁结果也统计在内...Q2:网站流量异常,如何才能正确进行反馈? A2:如果站点流量下降,请提供具体的域名,如果是主域则需要提供主域的URL及流量变化截图;如果具体到某个二级域,则需要提供相关二级域的数据。...同时还应提供反馈站点的某个关键词,之前在搜索结果的排名,日均获得多少流量;流量下降后,关键词在搜索的排名以及获得的流量、流量异常波动的幅度,这样反馈中心的工作人员才会尽快定位到问题。

40740

Array.slice 8种不同用法

,slice(-2)表示提取原数组的倒数第二个元素到最后一个元素(包含最后一个元素)。...slice提取原数组索引从 begin 到 end 的所有元素(包含begin,但不包含end)。...slice(-2,-1)表示抽取了原数组的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。 如果 end 被省略,则slice 一直提取到原数组末尾。...+ length); } 处理类似数组的对象 JavaScript,数组是一个特殊的对象,其property名为正整数,且其length属性随着数组成员的增减而发生变化,同时又从Array构造函数中继承了一些用于进行数组操作的方法...一些类似数组包如arguments(用于访问传递给函数的所有参数的关键字),NodeLists(从返回节点列表的任何DOM API方法返回),甚至是使用数字索引并添加length属性的原始对象。

76820

Array.slice 8种不同用法

,slice(-2)表示提取原数组的倒数第二个元素到最后一个元素(包含最后一个元素)。...slice提取原数组索引从 begin 到 end 的所有元素(包含begin,但不包含end)。...slice(-2,-1)表示抽取了原数组的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。 如果 end 被省略,则slice 一直提取到原数组末尾。...+ length); } 处理类似数组的对象 JavaScript,数组是一个特殊的对象,其property名为正整数,且其length属性随着数组成员的增减而发生变化,同时又从Array构造函数中继承了一些用于进行数组操作的方法...一些类似数组包如arguments(用于访问传递给函数的所有参数的关键字),NodeLists(从返回节点列表的任何DOM API方法返回),甚至是使用数字索引并添加length属性的原始对象。

1.1K30

jQuery原理

jQuery对象 2.字符串 代码片段:会将创建好的DOM元素储存到jQuery对象返回 选择器:会将所有找的元素存储到jQuery对象返回 3.数组 会将数组的元素依次存入到jQuery...对象返回 4.除上述以外的 会将传入的数据储存到jQuery对象返回 5.内置静态方法 (1)isString (2)isHTML (3)isObject (4)isWindow (...jQuery对象 2.字符串 代码片段:会将创建好的DOM元素储存到jQuery对象返回 选择器:会将所有找的元素存储到jQuery对象返回 3.数组 会将数组的元素依次存入到jQuery对象返回...)) { kjQuery.ready(selector); } // 2.字符串 // 代码片段:会将创建好的DOM元素储存到jQuery对象返回..."male",length:3}; var obj2 = {"name":"lnj","age":"33"}; kjQuery.each(arr, function (key, value

60910

JavaScript的IIFE(即时执行方法)

在下列代码,标准浏览器下f()函数和IIFE都返回'bar',但IE10-浏览器的f()函数返回'abc' var foo = "abc"; with({ foo:"bar" }){...JavaScript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // makeCounter函数返回的是一个新的函数,该函数对makeCounter...这是因为在javascript代码解释时,当遇到function关键字时,默认把它当做是一个函数声明,而不是函数表达式,如果没有把它显视地表达成函数表达式,就报错了,因为函数声明需要一个函数名,而上面的代码函数没有函数名...; // SyntaxError: Unexpected token ) 为什么这样?...JavaScript 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

1.4K50

第190天:js---String常用属性和方法(最全)

(arr.concat(4, 5));//[1,2,3,4,5] 2、indexOf 找到匹配项返回索引值,如果没找到返回-1 1 /*indexOf 找到匹配项返回索引值,如果没找到返回-1*/...("v",1);//-2 24 console.log(b1)//-1 25 console.log(b2)//-2 3、charAt 返回指定索引位置的字符,若索引越界,返回空字符串。...1 //返回指定索引位置的字符 2 //(因为Javascript没有字符类型,所以返回的是长度为1的字符串)。...,length) 获取部分字符串 2 从起始索引fromIndex开始截取长度length的字符串*/ 3 console.log('substr用法') 4 5 //从起始索引fromIndex...15 console.log(myString.slice(-1,2)); 16 // 如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度

2.9K30

10个经常被问及又不太好回答的JS面试题

代码段的输出不是shoaib和20,结果为undefined和26,这是由于JavaScript的吊装而导致的。...在JavaScript,数字均以浮点精度处理,因此可能不会总是产生预期的结果。 解决办法是什么? JavaScript为此引入了Math.abs。这将帮助你比较两个数字之间的绝对差。...}, 1000); setTimeout(function(){console.log(3)}, 0); console.log(4); })(); 输出 1 4 3 2 为什么?...在JavaScript中使用reverse时,该方法不仅返回reversed数组。它还会颠倒数组本身的顺序。 reverse方法返回对数组本身的引用。...在JavaScript,==在两件事之间进行比较,这并不严格。如果要严格比较,则可以使用===而不是==进行比较,这将比较两件事及其数据类型。同样,!=和!==运算符也可以这样工作。

44730

JavaScript权威指南 - 数组

JavaScript数组是动态的,有新元素添加时,自动更新length属性。 JavaScript数组元素索引可以是不连续的,它们之间可以有空缺。...数组的特别之处在于,当使用小于232的非负整数作为属性时数组自动维护其length属性。当然,数组也可以有自定义属性,但不常见。...//返回[2,3,4] a.slice(-3, -2); //返回[3] splice() Array.splice(index,count[, item1[, item2[, ...]]])该方法用来向数组添加或删除元素...开发可能遇到这样的情况:给定一个未知对象,判断它是否为数组对象。ECMAScript 5版本可以用Array.isArray()方法鉴别。...时,在子页面声明一个数组object,并将其赋值给父页面的一个变量,这时判断该变量:object instanceof Array返回false。

4.1K40

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

5、JavaScript数组是JavaScript对象的特殊形式。数组索引可以认为是整数的属性名。 6、数组继承自Array.prototype的属性。...注意: 1、方括号是一个返回非负整数值的任意表达式。 2、使用该语法既可以读又可以写数组的一个元素。 3、若数组的索引小于0,则默认将该索引值作为数组的一个属性。...pop 从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项 shift 移除数组的第一个项并返回该项,同时将数组长度减 一 delete 后接要删除的数组元素,数组的长度减一,并返回新数组.../ 尾部删除 console.log(arr); //[ , 2, 3, 4 ] arr.splice(1, 2, ...[22, 33]) //从1开始删除2个替换成22,33...ES6新增了8个方法用于对ES5的补充 方法 描述 copyWith( ) 在当前数组内部将指定位置的元素复制到其他位置(覆盖原有元素),返回当前数组。

28010

BAT及各大互联网公司2014前端笔试面试题--JavaScript

Ajax是异步JavaScript和XML,用于在Web页面实现异步数据交互。...“===”先判断两边的值类型,类型不匹配时为false。 那么问题来了,看下面的代码,输出什么,foo的类型为什么?...a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构,如{a:'1', b:'2', c:'...9.在Javascript什么是伪数组?如何将伪数组转化为标准数组? 答案: 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。...为什么? 答案是 1 和 undefined。 func 是在 winodw 的上下文中被执行的,所以访问不到 count 属性。

1.4K50
领券