programing

새로운 Number () 대 Number ()

nicescript 2021. 1. 14. 08:06
반응형

새로운 Number () 대 Number ()


new Number()의 차이점은 무엇입니까 Number()? 객체 new Number()생성하고 함수일 뿐인데 언제 어느 것을 호출해야하는데 왜 그럴까요?NumberNumber()

관련 메모에서 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

반응형