새로운 Number () 대 Number ()
new Number()
과 의 차이점은 무엇입니까 Number()
? 객체 를 new Number()
생성하고 함수일 뿐인데 언제 어느 것을 호출해야하는데 왜 그럴까요?Number
Number()
관련 메모에서 Mozilla는 다음과 같이 말합니다.
부울이 아닌 값을 부울 값으로 변환하기 위해 부울 객체를 사용하지 마십시오. 대신 부울을 함수로 사용하여이 작업을 수행하십시오.
x = Boolean(expression); // preferred x = new Boolean(expression); // don't use
왜 그런 겁니까? 결과가 같다고 생각 했나요?
Boolean(expression)
단순히로 표현을 변환합니다 부울 프리미티브 값 하면서, new Boolean(expression)
만듭니다 래퍼 객체 변환 된 부울 값 주위를.
차이점은 다음과 같습니다.
// Note I'm using strict-equals
new Boolean("true") === true; // false
Boolean("true") === true; // true
또한 이것으로 (@hobbs에게 감사드립니다) :
typeof new Boolean("true"); // "object"
typeof Boolean("true"); // "boolean"
참고 : 필요한 (또는 그 반대)이, 당신이 사용하고자하는 것입니다 경우 생각할 수있는 하나의 경우가되면 자동으로 랩퍼 오브젝트는 원시로 변환 얻을 것이다 동안 new Boolean
, 또는 다른 래퍼의 프리미티브를위한이 - 당신이 원하는 경우 단일 값에 속성을 첨부합니다. 예 :
var b = new Boolean(true);
b.relatedMessage = "this should be true initially";
alert(b.relatedMessage); // will work
var b = true;
b.relatedMessage = "this should be true initially";
alert(b.relatedMessage); // undefined
new Number( x )
새 래퍼 개체를 만듭니다. 나는 이것을 사용하는 타당한 이유가 있다고 생각하지 않습니다.
Number( x )
전달 된 인수를 숫자 값으로 변환합니다. 이를 사용하여 일부 변수를 Number 유형으로 캐스팅 할 수 있습니다. 그러나 이것은 동일한 작업을 수행합니다.
+x
일반적으로:
다음은 필요하지 않습니다.
new Number()
new String()
new Boolean()
캐스팅에 사용할 수 있습니다.
Number( value )
String( value )
Boolean( value )
그러나 캐스팅을위한 더 간단한 솔루션이 있습니다.
+x // cast to Number
'' + x // cast to String
!!x // cast to Boolean
항상 사양을 참조 할 가치가 있습니다 . 섹션 15.7.1에서 :
Number
생성자가 아닌 함수로 호출 되면 유형 변환을 수행합니다.
마찬가지로 Boolean
함수로 사용 (15.6.1) :
Boolean이 생성자가 아닌 함수로 호출되면 유형 변환을 수행합니다.
... 즉, 섹션 9.2 ( "ToBoolean")를 참조하십시오.
추상 연산 ToBoolean은 표 11에 따라 인수를 부울 유형의 값으로 변환합니다.
Undefined
=false
Null
=false
Boolean
= 결과는 입력 인수와 같습니다 (변환 없음).Number
= 인수가 +0, -0 또는 NaN이면 결과는 거짓입니다. 그렇지 않으면 결과는 참입니다.String
= 인수가 빈 문자열 (길이가 0)이면 결과는 거짓입니다. 그렇지 않으면 결과는 참입니다.Object
=true
The difference between new Boolean(value)
and Boolean(value)
is basically that the former returns an object, but the latter returns a primitive per the above. This matters, because objects are truthy:
var b = new Boolean(false);
display(b); // Displays "false"
if (b) {
display("true"); // This is the path that gets taken, displaying "true"
}
else {
display("false"); // This path does NOT get taken
}
Live example ...whereas you almost always want booleans for the purpose of testing them.
ReferenceURL : https://stackoverflow.com/questions/4719320/new-number-vs-number
'programing' 카테고리의 다른 글
기본 데이터 소스를 업데이트 할 때 DataGridView를 새로 고치는 가장 좋은 방법 (0) | 2021.01.14 |
---|---|
이메일을 받고 웹 애플리케이션에서 처리하는 방법 (0) | 2021.01.14 |
조건부 빌더 메서드 체인 Fluent 인터페이스 (0) | 2021.01.14 |
LINQ에서 Union All을 사용하는 방법은 무엇입니까? (0) | 2021.01.14 |
Cassandra column family의 모든 데이터를 삭제하려면 어떻게해야합니까? (0) | 2021.01.14 |