为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

2024-05-29

我想将一个数组的元素添加到另一个数组中,所以我尝试了以下方法:

[1,2] + [3,4]

它的回应是:

"1,23,4"

到底是怎么回事?


The +操作员没有为数组定义.

发生的事情是 JavaScript将数组转换为字符串并将它们连接起来。

 

Update

由于这个问题以及我的回答引起了很多关注,我觉得有一个有用且相关的overview关于如何+操作员的行为也一般。

那么,就这样吧。

排除 E4X 和特定于实现的内容,Javascript(从 ES5 开始)具有6内置数据类型 http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator:

  1. 不明确的
  2. Null
  3. Boolean
  4. Number
  5. String
  6. Object

请注意,虽然typeof 有点令人困惑的回报 https://developer.mozilla.org/en/Javascript/Reference/Operators/Special/typeof object对于空和function对于可调用对象,Null 实际上不是对象,严格来说,在符合规范的 Javascript 实现中,所有函数都被视为对象。

没错 - Javascript 有没有原始数组像这样;仅称为对象的实例Array用一些语法糖来减轻痛苦。

包装实体(例如new Number(5), new Boolean(true) and new String("abc")都是object类型,而不是人们所期望的数字、布尔值或字符串。然而对于算术运算符Number and Boolean表现得像数字一样。

容易吧?完成所有这些后,我们可以继续进行概述。

不同的结果类型+按操作数类型

            || undefined | null   | boolean | number | string | object |
=========================================================================
 undefined  || number    | number | number  | number | string | string | 
 null       || number    | number | number  | number | string | string | 
 boolean    || number    | number | number  | number | string | string | 
 number     || number    | number | number  | number | string | string | 
 string     || string    | string | string  | string | string | string | 
 object     || string    | string | string  | string | string | string | 

* applies to Chrome13, FF6, Opera11 and IE9. Checking other browsers and versions is left as an exercise for the reader.

Note:正如所指出的CMS https://stackoverflow.com/users/5445/cms,对于某些对象的情况,例如Number, Boolean和定制的+运算符不一定会产生字符串结果。它可能会根据对象到基元转换的实现而有所不同。例如var o = { valueOf:function () { return 4; } };评估o + 2;产生6, a number, 评估o + '2'产生'42', a string.

要查看概览表是如何生成的,请访问http://jsfiddle.net/1obxuc7m/ http://jsfiddle.net/1obxuc7m/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ? 的相关文章

  • 生成字符串所有可能排列的列表

    我将如何生成一个长度为 x 和 y 字符之间的字符串的所有可能排列的列表 其中包含可变字符列表 任何语言都可以 但它应该是可移植的 做这件事有很多种方法 常见的方法使用递归 记忆或动态编程 基本思想是 生成长度为 1 的所有字符串的列表 然
  • VueJS $watch $refs

    是否有可能 watch Vue refs 我想针对嵌套在当前 Vue 实例内但在ready打回来 refs childcomponent最初是undefined当它被处理时 inside ready this watch refs func
  • React Material UI 1.0 在更改时选择多个参数

    我正在使用 React Material Ui 1 0 0 beta 34 并且 Select 组件有问题 我正在尝试设置附加参数onChange事件处理程序 但看起来只允许传递事件参数 这就是我的自定义选择组件的样子 import Rea
  • 如何将 GenericArray 转换为相同长度的数组?

    我正在计算给定数据的 SHA256 let hashvalue sha2 Sha256 digest data 计算后 我想将该值放入结构的一个字段中 let x Hash value hashvalue 但是 那Hashstruct 需要
  • 如何使用带有 ID 的单独播放按钮播放多个 HTML5 视频

    我有一个 HTML5 视频列表 其中也有一个播放按钮 每个播放按钮都有一个唯一的标识符 作为类名 然后每个视频都有一个匹配的类名 这样我就可以将特定的按钮分配给特定的视频进行播放 HTML
  • 查找枚举转换为字符串的所有位置

    我目前正在尝试在解决方案中找到将特定枚举转换为字符串的所有位置 无论是否显式调用 ToString 这些正在被使用枚举描述的转换所取代 以改善混淆 示例 我想找到如下代码string str Value SomeEnum someValue
  • DevTools 无法解析 SourceMap

    我正在尝试让我的 Webpack 项目拥有源映射文件 我终于得到了正确的设置 以便它可以做到这一点 但现在我收到此错误 DevTools 无法解析 SourceMap http MyServer MyApp bundle js map ht
  • Chart.js 不显示图表数据时的默认值

    我正在使用 Chart Js 来显示我的图表 我通过 ajax 获取图表数据并以图形方式呈现它以显示数据 我的问题是 在极少数情况下 我的 Ajax 不返回任何内容 而我的图表仅显示 X 轴和 Y 轴 没有数据或没有显示图例 有没有显示默认
  • 如何循环并访问多维且关联的数组中的各个元素? PHP,JSON 或 XML

    我正在通过 API zotero org 检索书目数据 它与底部的示例类似 只是更复杂 示例是键入的 我想检索一条或多条记录并在页面上显示某些值 例如 我想循环遍历每个顶级记录并以格式良好的引文打印数据 暂时忽略正确的围兜样式 假设我只想为
  • 工厂函数方法不更新变量

    我正在尝试设置一个工厂函数 该函数将更新所述工厂函数中特定变量的值 这看起来实现起来很简单 但是 每当我测试它时 我都会得到变量的原始设置值 而不是更新后的值 我确信在范围界定方面我缺少一些细微差别 但这里到底发生了什么 const fac
  • 我什么时候应该使用 Scala 的数组而不是其他集合之一?

    这更多的是风格和偏好的问题 但这里是 我什么时候应该使用 scala Array 我一直使用 List 偶尔会遇到 Seq Map 等 但我从未在野外使用或见过 Array 仅仅是为了兼容 Java 吗 我错过了一个常见的用例吗 首先 我们
  • 如何对页面的某个部分进行实时更新?

    我需要刷新页面的各个部分 以便在有新数据时进行更新 我该怎么办 使用jquery 例子 是的 jQuery 非常适合这个 查看这些方法 http api jquery com category ajax http api jquery co
  • 是的验证;同一字段可以接受不同类型吗?

    我对是的很陌生 我试图验证字段可以是遵循某个正则表达式的字符串 也可以是此类字符串的数组 这是检查字符串与我的正则表达式匹配的工作示例 field yup string matches regex 现在我想要field如果它有一个这样的字符
  • 数组和foreach

    posts array message gt this is a test message foreach posts as post echo post message 为什么上面的代码只输出message中的第一个字母 t Thanks
  • Karma Webpack - 错误:找不到模块“./test/utilities.js”

    我正在使用 Karma Webpack 进行项目的单元测试 当我跑步时karma start 我有这个错误 Error Cannot find module test utilities js at myproject test campa
  • JSON 解析错误 - JSON 中位置 1 处出现意外标记 o

    我需要获取一个 JSON 对象并记录标题控制台以实现自动完成功能 我的 json 的示例如下 title Example 1 url http www example1 com title Example 2 url http www ex
  • 使用 javascript 和 jQuery UI datepicker 获取工作日数

    我有两个日期选择器 我可以从中计算天数 而无需计算星期六和星期日 但我想在周五和周六这样做 我尝试过一些不同的方法但失败了 对我来说 处理不包括周六和周日的天数很容易 但处理周五和周六的天数则不然 以下是我的 javascript 代码 f
  • JavaScript - babel-preset-env 不为 IE11 转换箭头函数

    我很难尝试配置 Babel 来转译 IE11 可以理解的代码 特别是箭头函数 跑步npx webpack mode development使用我的配置不会转换我的代码中的箭头函数 在eval 在生成的代码中的语句中 我可以看到所有实例都未转
  • 闭包和异步 Node.js 函数

    All 尝试了解 Node js 上下文中的闭包 异步调用 我有以下代码 timer setInterval pollOID 1000 function pollOID for channel in channels session get
  • Angularjs 使用 ng-init 为 ng-model 赋值

    您好 我有以下问题 看起来很简单并且应该有效 但事实并非如此 在我的代码中我输入了

随机推荐