以下运算
{}+{}
结果是什么?稍等..
先了解下+运算符。JavaScript中运算符 “+” 很简单,有两种意思
1,字符串连接
2,数字相加
运算时其它值都将转换成这两个类型。
JavaScript中有基本类型(undefined, null, booleans, numbers, strings)、对象类型(objects, arrays)和函数类型(functions)。
类型转换时先将对象/函数类型转换成基本类型。然后在根据运算符“+”转成字符串或数字。
其它基本类型转成数字
有如下规则
Number(undefined) // NaN
Number(null) // 0
Number(true) // 1
Number(false) // 0
Number('1') // 1
其它基本类型转成字符串
有如下规则
String(undefined) // "undefined"
String(null) // "null"
String(true) // "true"
String(false) // "false"
String(1) // "1"
回到上面的题目 : {}+{}
1,先将两个对象直接量转成基本类型,{}的valueOf()还是自己。如下
var obj = {};
obj.valueOf() === obj; // true
2,转成字符串,{}的toString()是“[object Object]”
最后两个字符串连接的结果是“[object Object][object Object]”。
结果真是这个吗?在浏览器的控制台中测试不是,是NaN。
真让人匪夷所思,前面一路推理下来最后竟然不对。
其实原因是第一个{}并非表示对象直接量,而是语句块的意思。参考:Javascript中大括号“{}”的多义性
即第一个大括号是语句块,该语句块中没有任何执行语句,可以忽略。演变是这样的
1 {}+{}
2 +{}
3 +"[object Object]"
4 NaN
恍然大悟了,加个小括号强制将第一个大括号转成对象直接量
。结果就是期望的了。如
({}+{})
这时将输出
补充:node环境中 {}+{} 输出的是“[object Object][object Object]” 却不是 NaN
相关:JavaScript中“+”的陷阱(续)
- 大小: 5.4 KB
- 大小: 2 KB
分享到:
相关推荐
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是扮演着核心角色。设计模式和异步编程是提升JavaScript代码质量和效率的关键。以下将详细介绍这三本书所涵盖的知识点: 1. **JavaScript设计模式**: ...
本文将详细探讨一些常见的JavaScript陷阱,并提供相应的解决方案。 #### 双等号(==)与类型强制转换 在JavaScript中,双等号`==`操作符在比较两个值时会进行类型转换,这意味着即使两边的数据类型不同,也会尝试...
JavaScript 和 jQuery 是 web 开发中不可或缺的两个工具,它们在构建动态、交互性强的网页时起着关键作用。本资源“精通 Javascript+jQuery 视频下载”旨在帮助开发者深入理解和熟练掌握这两门技术。 JavaScript 是...
**陷阱**:如果你不小心将HTML元素的ID设置为与JavaScript变量相同的名字,那么在某些浏览器中(尤其是IE),这个变量可能会被覆盖或解析为HTML元素。 #### 4. 字符串替换陷阱 JavaScript中的字符串方法 `replace...
《精通JavaScript+jQuery》是曾顺撰写的一本深入学习JavaScript和jQuery技术的书籍,它旨在帮助读者全面理解和掌握这两种在Web开发中至关重要的脚本语言。本书分为多个部分,这里是第二部分的内容概述。 1. ...
在JavaScript编程语言中,`+` 运算符是一个多功能的操作符,它可以用于数值加法,也可以用于字符串连接。然而,对于不熟悉其特性的开发者来说,`+` 运算符可能会引发一些陷阱和混淆。本文将深入探讨其中的一些常见...
其中,动态类型的特性使得JavaScript具有很高的灵活性,但同时也可能带来一些陷阱,如隐式类型转换。理解JavaScript的原型链和闭包是进阶学习的关键,这些概念对于实现面向对象编程和模块化设计至关重要。 在本书中...
此外,书中还涉及了一些高级话题,如异步编程(AJAX)、DOM遍历优化和性能考虑,以及如何避免常见的JavaScript和DOM相关的陷阱。这些章节有助于读者在实践中提高代码质量和效率,为开发高性能的Web应用做好准备。 ...
本文将对JavaScript中常见的陷阱进行小结,以帮助开发者在项目中避免这些潜在问题。 首先,需要明确的是JavaScript中的大小写敏感性。这意味着在编写JavaScript代码时,所有变量名、函数名以及对象属性名都是区分大...
书中包含7个章节,覆盖了JavaScript的多个关键领域。 第一章主要涉及JavaScript的基础知识。在这里,作者强调了不同JavaScript版本之间的差异,特别是ECMAScript规范的演变,这对于理解代码的兼容性至关重要。此外...
JavaScript还具有动态类型和弱引用的特点,这使得它在处理数据时具有灵活性,但也可能导致一些陷阱。书中会讨论这些特性的使用和潜在问题,帮助开发者避免常见的错误。 事件驱动模型是JavaScript在Web开发中的一个...
以下是一些常见的JavaScript性能陷阱及其优化建议: 1. **避免使用`eval`或`Function`构造函数**: `eval`和`Function`构造函数在执行时需要将字符串解析成JavaScript代码,这是一个昂贵的过程。尽量避免它们,...
这本书深入探讨了JavaScript的核心概念,旨在帮助开发者掌握这门语言的精华部分,避免其潜在的问题和陷阱。书中的内容涵盖了JavaScript的各个方面,包括语法特性、函数式编程、对象模式、错误处理以及代码质量等多个...
4. "有关 JavaScript 的 10 件让人费解的事情 - CSDN资讯.mht":这是一个关于JavaScript中的一些常见陷阱和不寻常特性的文章,可以帮助开发者避免常见错误,提高编程技巧。 5. "引用js大全.txt"、"JS.txt"、"js分页...
《JavaScript的秘密花园》是一份持续更新的文档,致力于揭示JavaScript中那些鲜为人知且容易引起混淆的特性与用法。这份指南不仅帮助开发者规避常见的陷阱,还提供了针对性能优化、错误排查及避免不良编程习惯的宝贵...
总的来说,这个压缩包中的资源将帮助你从基础到进阶,全面了解JavaScript API,理解其工作原理,掌握实用技巧,并能够灵活应用于实际项目中。无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过深入学习和...
书中会讲解如何利用动态性提高灵活性,同时避免常见的类型陷阱。 2. **对象与原型**:JavaScript的原型继承机制是其独特之处。了解如何创建和使用原型链,以及如何有效地利用`__proto__`和`Object.create()`,可以...
3. 避免常见的编程陷阱:在本书中,作者不仅提供了理论知识,还加入了实践中的小提示,帮助读者理解在日常编程中可能遇到的问题(gotchas)。掌握这些内容可以有效避免编码过程中的常见错误。 4. 实际应用场景的...
### JavaScript Garden:深入探讨JavaScript中的陷阱与注意事项 #### 引言 《JavaScript Garden》是一份不断更新、详尽记录了JavaScript编程语言中最易犯错误、陷阱及细微问题的指南。该文档不仅帮助开发者规避常见...
书中讲解了JavaScript的五种基本类型(Undefined、Null、Boolean、Number、String)以及复杂类型(Object),并讨论了类型转换的陷阱和应对策略。 对于异步操作,作者详细解读了回调函数、Promise和async/await,...