>  기사  >  웹 프론트엔드  >  JavaScript에서 [1,2] + [3,4]가 [1,2,3,4]와 같지 않은 이유에 대한 문제 해결

JavaScript에서 [1,2] + [3,4]가 [1,2,3,4]와 같지 않은 이유에 대한 문제 해결

黄舟
黄舟원래의
2017-08-10 11:02:182302검색

문제

다른 배열에 배열을 추가하고 싶어서 Firebug에 다음 코드를 작성했습니다.


[1,2] + [3,4]

그러나 예기치 않게 다음과 같이 출력되었습니다.


"1,23,4"

없이 예상한 대로 출력:


[1,2,3,4]

답변

JavaScript의 + 연산자에는 두 가지 목적이 있습니다.

  • 두 개의 숫자를 추가하고

  • 두 문자열을 연결합니다.

사양은 배열에 대한 + 연산자의 동작을 정의하지 않으므로 자바스크립트는 먼저 배열을 문자열로 변환한 다음 문자열에 대해 + 연산을 수행합니다.

두 배열을 연결하려면 배열의 concat 메소드를 사용할 수 있습니다.


[1, 2].concat([3, 4]) // [1, 2, 3, 4]

javascript의 + 연산자 개요

JavaScript에는 6가지 내장 데이터 유형이 있습니다. 연결, 원본 작성자는 원본 유형 시스템의 데이터 유형을 의미해야 합니다. JavaScript에는 실제로 두 가지 유형 시스템이 있습니다. 첫 번째 유형 시스템은 <code><strong><span style="color: #ff0000;">typeof</span></strong> 来识别,称之为原始(primitive)类型系统,而第二套类型系统是以它为基础,从 object 这一种类型中发展起来的,即对象类型系统,对象类型系统用 instanceof 来识别。)

  • undefined

  • boolean

  • number

  • string

  • function

  • object

需要注意的是,null 和 <strong><span style="color: #ff0000;">[]</span></strong> 是两个截然不同的类型,当使用 <code><strong><span style="color: #ff0000;">typeof</span></strong> 运算时,它们却都返回 object。 但是在使用 + 运算符时,在这两种情况下的工作方式是不同的。

在JavaScript 中,数组不是基本类型,它的存在仅仅是一个糖衣语法,它其实是 Array 类的实例。(ps:function 其实也是Function 类实例的糖衣语法。)

如果说道现在你脑子还是清醒的,是时候加点儿猛料了。javascript 的对象包装器类型例如 new Number(5)new Boolean(true)和 <strong><span style="color: #ff0000;">new String("abc")</span></strong> 也都是 object 类型,它们不是数字,布尔,字符串。然而,对于算数运算符 Number 和 Boolean 表现的为数字。

还记得我前面说过的 + 运算符吗?它的操作对象是 数字和字符串,也就是 NumberBooleanString 或者 numberbooleanstringtypeof
로 식별됩니다. Primitive 유형 시스템이라고 하며, 두 번째 유형 시스템은 이를 기반으로 객체 유형, 즉 객체 유형 시스템을 개발하여

instanceof로 표현합니다.

를 사용할 때

🎜null 🎜🎜과 🎜🎜[]🎜🎜은 완전히 다른 유형이라는 점에 유의해야 합니다. 🎜🎜typeof🎜🎜 작업이지만 모두 🎜🎜객체🎜🎜를 반환합니다. 그러나 + 연산자를 사용할 경우 이 두 경우에 작동하는 방식이 다릅니다. 🎜🎜JavaScript에서 🎜🎜배열은 기본 유형이 아닙니다🎜🎜. 그 존재는 실제로 🎜🎜 배열의 인스턴스입니다. 🎜🎜수업. (ps: 🎜🎜function 🎜🎜은 실제로 🎜🎜Function 🎜🎜 클래스 인스턴스의 설탕 코팅된 구문입니다.)🎜🎜지금도 마음이 맑다면, 좀 더 추가할 시간입니다. 정말 놀랍습니다. 🎜🎜 new Number(5)🎜🎜, 🎜🎜new Boolean(true)🎜🎜 및 javascript에 대한 객체 래퍼 유형 >🎜🎜new String("abc")🎜🎜 역시 object 유형이며 숫자, 부울 또는 문자열이 아닙니다. 그러나 산술 연산자 숫자부울은 숫자를 나타냅니다. 🎜🎜앞서 언급한 + 연산자를 기억하시나요? 연산 개체는 숫자와 문자열입니다. 즉, 🎜🎜Number🎜🎜, 🎜🎜Boolean🎜🎜, 🎜🎜String 🎜🎜 또는 🎜🎜 숫자🎜🎜, 🎜🎜부울🎜🎜, 🎜🎜문자열🎜🎜. 🎜다음 표는 다양한 유형에 대해 + 연산자를 연산한 후 얻은 결과 유형입니다.🎜
----------------------------------------------------------------------------------------
           | undefined | boolean | number | string | function | object | null   | array
----------------------------------------------------------------------------------------
undefined  | number    | number  | number | string | string   | string | number | string
boolean    | number    | number  | number | string | string   | string | number | string

number     | number    | number  | number | string | string   | string | number | string

string     | string    | string  | string | string | string   | string | string | string
function   | string    | string  | string | string | string   | string | string | string

object     | string    | string  | string | string | string   | string | string | string
null       | number    | number  | number | string | string   | string | number | string

array      | string    | string  | string | string | string   | string | string | string
-------------------------------------------------------------------------------------------
🎜🎜이 표는 Chrome 13, Firefox 6, Opera 11 및 IE9에 적용됩니다. 숙제: 다른 브라우저 호환성을 확인하세요. 🎜🎜🎜참고: 사용자 정의 개체에 대한 + 연산이 항상 문자열 결과를 생성하는 것은 아닙니다. 이는 주로 객체 유형을 기본 유형으로 변환하는 방법에 따라 달라집니다. 🎜🎜예: 🎜
var o = { 
    valueOf : function () { return 4; } 
};
🎜o + 2를 계산하면 숫자인 6이 나오고, o + '2'를 계산하면 문자열인 '42'가 나옵니다. 🎜

위 내용은 JavaScript에서 [1,2] + [3,4]가 [1,2,3,4]와 같지 않은 이유에 대한 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.