배열의 요소를 다른 요소에 추가하고 싶었으므로 다음과 같이 시도했습니다.
[1,2] + [3,4]
다음과 같이 응답했습니다.
"1,23,4"
무슨 일이야?
답변
+
연산자는 배열에 정의되지 않는다 .
Javascript 는 배열을 문자열로 변환하고 배열로 연결합니다.
최신 정보
이 질문과 결과적으로 제 답변이 많은 관심을 받고 있기 때문에 운영자가 일반적으로 어떻게 행동하는지에 대한 개요 를 갖는 것이 유용하고 적절하다고 생각했습니다 +
.
그래서, 여기에 간다.
E4X 및 구현 별 항목을 제외하고 Javascript (ES5 기준)에는 6 가지 기본 제공 데이터 유형이 있습니다 .
- 찾으시는 주소가 없습니다
- 없는
- 부울
- 번호
- 끈
- 목적
Null과 호출 가능한 Object에 대해 typeof
다소 혼란스럽게 반환 하지만 Null은 실제로 Object가 아니며 엄격하게 말하면 사양을 준수하는 Javascript 구현에서 모든 함수는 Object로 간주됩니다.object
function
맞습니다. 자바 스크립트에는 기본 배열 이 없습니다 . Array
통증을 완화하기 위해 구문 설탕으로 불리는 개체의 인스턴스 만 .
같은 기관 래퍼 혼란을 더 추가 new Number(5)
, new Boolean(true)
및 new String("abc")
의 모두 object
유형, 하나는 예상대로되지 숫자, 부울 또는 문자열. 그럼에도 불구하고 산술 연산자에 대한 Number
및 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 |
* Chrome13, FF6, Opera11 및 IE9에 적용됩니다. 다른 브라우저와 버전을 확인하는 것은 독자의 연습으로 남아 있습니다.
참고 : CMS 에서 지적한 것처럼 Number
, Boolean
사용자 지정 개체와 같은 특정 개체의 경우 +
운영자가 반드시 문자열 결과를 생성하지는 않습니다. 객체 대 원시 변환의 구현에 따라 달라질 수 있습니다. 예를 들어 var o = { valueOf:function () { return 4; } };
평가는 o + 2;
생산 6
, a는 number
, 평가는 o + '2'
생산 '42'
a는 string
.
개요 테이블이 생성 된 방법을 보려면 http://jsfiddle.net/1obxuc7m/을 방문하십시오.
답변
JavaScript +
연산자는 두 가지 숫자를 추가하거나 두 문자열을 결합하는 두 가지 목적이 있습니다. 배열에 대한 특정 동작이 없으므로 배열을 문자열로 변환 한 다음 결합합니다.
두 개의 배열을 결합하여 새 배열을 생성하려면 대신 메소드 를 사용 하십시오.concat
.
[1, 2].concat([3, 4]) // [1, 2, 3, 4]
한 배열에서 다른 배열로 모든 요소를 효율적으로 추가 하려면 .push 메소드 를 사용해야 합니다 .
var data = [1, 2];
// ES6+:
data.push(...[3, 4]);
// or legacy:
Array.prototype.push.apply(data, [3, 4]);
// data is now [1, 2, 3, 4]
+
운영자 의 동작은 ECMA-262 5e 섹션 11.6.1에 정의되어 있습니다 .
11.6.1 덧셈 연산자 (+)
더하기 연산자는 문자열 연결 또는 숫자 추가를 수행합니다. 생산
AdditiveExpression : AdditiveExpression + MultiplicativeExpression
은 다음과 같이 평가됩니다.
lref
평가 결과를 보자AdditiveExpression
.- 하자
lval
수GetValue(lref)
.rref
평가 결과를 보자MultiplicativeExpression
.- 하자
rval
수GetValue(rref)
.- 하자
lprim
수ToPrimitive(lval)
.- 하자
rprim
수ToPrimitive(rval)
.- 경우
Type(lprim)
입니다String
또는Type(rprim)
이다String
후,
- 연결 한
ToString(lprim)
뒤에 나오는 문자열을 반환합니다.ToString(rprim)
- 더하기 연산을 적용한 결과를
ToNumber(lprim)
및에 반환합니다ToNumber(rprim)
. 아래의 참고 사항을 참조하십시오 11.6.3.
각 피연산자가 변환 된 것을 볼 수 있습니다 ToPrimitive
. 더 자세히 읽으면 ToPrimitive
항상 배열을 문자열로 변환 하여이 결과를 생성 한다는 것을 알 수 있습니다.
답변
두 배열 을 마치 문자열 인 것처럼 추가합니다 .
첫 번째 배열의 문자열 표현은 “1,2” 이고 두 번째 배열은 “3,4” 입니다. 따라서 +
부호가 발견되면 배열을 합한 다음 문자열로 연결할 수 없습니다.
답변
+
concats 문자열, 그래서 문자열 배열을 변환합니다.
[1,2] + [3,4]
'1,2' + '3,4'
1,23,4
배열을 결합하려면을 사용하십시오 concat
.
[1,2].concat([3,4])
[1,2,3,4]
답변
JavaScript에서 이진 덧셈 연산자 ( +
)는 숫자 덧셈과 문자열 연결을 모두 수행합니다. 그러나 첫 번째 인수가 숫자이거나 문자열이 아닌 경우 문자열로 변환하여 ( ” 1,2
“) 두 번째 ” 3,4
“와 동일하게 수행하여 ” “로 연결합니다 1,23,4
.
대신 배열의 “concat”메소드를 사용해보십시오.
var a = [1, 2];
var b = [3, 4];
a.concat(b) ; // => [1, 2, 3, 4];
답변
개별 배열을 문자열로 변환 한 다음 문자열을 결합합니다.
답변
JavaScript가 배열을 문자열로 바꾸고 함께 결합하는 것처럼 보입니다. 튜플을 함께 추가하려면 루프 또는 맵 기능을 사용해야합니다.