`
zhouyrt
  • 浏览: 1173204 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript中“+”的陷阱

 
阅读更多

以下运算

{}+{}

 

结果是什么?稍等..

 

先了解下+运算符。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设计模式+JavaScript模式+JavaScript异步编程

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是扮演着核心角色。设计模式和异步编程是提升JavaScript代码质量和效率的关键。以下将详细介绍这三本书所涵盖的知识点: 1. **JavaScript设计模式**: ...

    Javascript中的陷阱大集合【译】

    本文将详细探讨一些常见的JavaScript陷阱,并提供相应的解决方案。 #### 双等号(==)与类型强制转换 在JavaScript中,双等号`==`操作符在比较两个值时会进行类型转换,这意味着即使两边的数据类型不同,也会尝试...

    精通Javascript+jQuery视频下载

    JavaScript 和 jQuery 是 web 开发中不可或缺的两个工具,它们在构建动态、交互性强的网页时起着关键作用。本资源“精通 Javascript+jQuery 视频下载”旨在帮助开发者深入理解和熟练掌握这两门技术。 JavaScript 是...

    JavaScript的9个陷阱及评点

    **陷阱**:如果你不小心将HTML元素的ID设置为与JavaScript变量相同的名字,那么在某些浏览器中(尤其是IE),这个变量可能会被覆盖或解析为HTML元素。 #### 4. 字符串替换陷阱 JavaScript中的字符串方法 `replace...

    精通JavaScript+jQuery_2

    《精通JavaScript+jQuery》是曾顺撰写的一本深入学习JavaScript和jQuery技术的书籍,它旨在帮助读者全面理解和掌握这两种在Web开发中至关重要的脚本语言。本书分为多个部分,这里是第二部分的内容概述。 1. ...

    JavaScript中“+”的陷阱深刻理解

    在JavaScript编程语言中,`+` 运算符是一个多功能的操作符,它可以用于数值加法,也可以用于字符串连接。然而,对于不熟悉其特性的开发者来说,`+` 运算符可能会引发一些陷阱和混淆。本文将深入探讨其中的一些常见...

    JavaScript权威指南(第六版)中文扫描版(pdf)+ 英文文字版(epud+pdf)+码源

    其中,动态类型的特性使得JavaScript具有很高的灵活性,但同时也可能带来一些陷阱,如隐式类型转换。理解JavaScript的原型链和闭包是进阶学习的关键,这些概念对于实现面向对象编程和模块化设计至关重要。 在本书中...

    javascriptDom编程艺术+源码

    此外,书中还涉及了一些高级话题,如异步编程(AJAX)、DOM遍历优化和性能考虑,以及如何避免常见的JavaScript和DOM相关的陷阱。这些章节有助于读者在实践中提高代码质量和效率,为开发高性能的Web应用做好准备。 ...

    JavaScript中常见陷阱小结

    本文将对JavaScript中常见的陷阱进行小结,以帮助开发者在项目中避免这些潜在问题。 首先,需要明确的是JavaScript中的大小写敏感性。这意味着在编写JavaScript代码时,所有变量名、函数名以及对象属性名都是区分大...

    Effective JavaScript 编写高质量JavaScript代码的68个有效方法1

    书中包含7个章节,覆盖了JavaScript的多个关键领域。 第一章主要涉及JavaScript的基础知识。在这里,作者强调了不同JavaScript版本之间的差异,特别是ECMAScript规范的演变,这对于理解代码的兼容性至关重要。此外...

    javascript权威指南 epub书及源码

    JavaScript还具有动态类型和弱引用的特点,这使得它在处理数据时具有灵活性,但也可能导致一些陷阱。书中会讨论这些特性的使用和潜在问题,帮助开发者避免常见的错误。 事件驱动模型是JavaScript在Web开发中的一个...

    JavaScript性能陷阱小结(附实例说明)

    以下是一些常见的JavaScript性能陷阱及其优化建议: 1. **避免使用`eval`或`Function`构造函数**: `eval`和`Function`构造函数在执行时需要将字符串解析成JavaScript代码,这是一个昂贵的过程。尽量避免它们,...

    JavaScript语言精粹(JavaScript.The.Good.Parts)

    这本书深入探讨了JavaScript的核心概念,旨在帮助开发者掌握这门语言的精华部分,避免其潜在的问题和陷阱。书中的内容涵盖了JavaScript的各个方面,包括语法特性、函数式编程、对象模式、错误处理以及代码质量等多个...

    jsp+javascript收集

    4. "有关 JavaScript 的 10 件让人费解的事情 - CSDN资讯.mht":这是一个关于JavaScript中的一些常见陷阱和不寻常特性的文章,可以帮助开发者避免常见错误,提高编程技巧。 5. "引用js大全.txt"、"JS.txt"、"js分页...

    JavaScript 秘密花园.pdf

    《JavaScript的秘密花园》是一份持续更新的文档,致力于揭示JavaScript中那些鲜为人知且容易引起混淆的特性与用法。这份指南不仅帮助开发者规避常见的陷阱,还提供了针对性能优化、错误排查及避免不良编程习惯的宝贵...

    JavaScript API

    总的来说,这个压缩包中的资源将帮助你从基础到进阶,全面了解JavaScript API,理解其工作原理,掌握实用技巧,并能够灵活应用于实际项目中。无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。通过深入学习和...

    JavaScript经典进阶系列-Effective JavaScript英文原版

    书中会讲解如何利用动态性提高灵活性,同时避免常见的类型陷阱。 2. **对象与原型**:JavaScript的原型继承机制是其独特之处。了解如何创建和使用原型链,以及如何有效地利用`__proto__`和`Object.create()`,可以...

    Effective JavaScript.2014.pdf

    3. 避免常见的编程陷阱:在本书中,作者不仅提供了理论知识,还加入了实践中的小提示,帮助读者理解在日常编程中可能遇到的问题(gotchas)。掌握这些内容可以有效避免编码过程中的常见错误。 4. 实际应用场景的...

    javascript garden

    ### JavaScript Garden:深入探讨JavaScript中的陷阱与注意事项 #### 引言 《JavaScript Garden》是一份不断更新、详尽记录了JavaScript编程语言中最易犯错误、陷阱及细微问题的指南。该文档不仅帮助开发者规避常见...

    Effective JavaScript

    书中讲解了JavaScript的五种基本类型(Undefined、Null、Boolean、Number、String)以及复杂类型(Object),并讨论了类型转换的陷阱和应对策略。 对于异步操作,作者详细解读了回调函数、Promise和async/await,...

Global site tag (gtag.js) - Google Analytics