File tree Expand file tree Collapse file tree 3 files changed +45
-4
lines changed Expand file tree Collapse file tree 3 files changed +45
-4
lines changed Original file line number Diff line number Diff line change @@ -1049,10 +1049,31 @@ by `new Boolean()`.
10491049``` js
10501050util .types .isBooleanObject (false ); // Returns false
10511051util .types .isBooleanObject (true ); // Returns false
1052- util .types .isBooleanObject (new Boolean (false )); // Returns true
1053- util .types .isBooleanObject (new Boolean (true )); // Returns true
1052+ util .types .isBooleanObject (new Boolean (false )); // Returns true
1053+ util .types .isBooleanObject (new Boolean (true )); // Returns true
10541054util .types .isBooleanObject (Boolean (false )); // Returns false
1055- util .types .isBooleanObject (Boolean (true )); // Returns false
1055+ util .types .isBooleanObject (Boolean (true )); // Returns false
1056+ ```
1057+
1058+ ### util.types.isBoxedPrimitive(value)
1059+ <!-- YAML
1060+ added: REPLACEME
1061+ -->
1062+
1063+ * ` value ` {any}
1064+ * Returns: {boolean}
1065+
1066+ Returns ` true ` if the value is any boxed primitive object, e.g. created
1067+ by ` new Boolean() ` , ` new String() ` or ` Object(Symbol()) ` .
1068+
1069+ For example:
1070+
1071+ ``` js
1072+ util .types .isBoxedPrimitive (false ); // Returns false
1073+ util .types .isBoxedPrimitive (new Boolean (false )); // Returns true
1074+ util .types .isBoxedPrimitive (Symbol (' foo' )); // Returns false
1075+ util .types .isBoxedPrimitive (Object (Symbol (' foo' ))); // Returns true
1076+ util .types .isBoxedPrimitive (Object (BigInt (5 ))); // Returns true
10561077```
10571078
10581079### util.types.isDataView(value)
Original file line number Diff line number Diff line change @@ -51,6 +51,15 @@ static void IsAnyArrayBuffer(const FunctionCallbackInfo<Value>& args) {
5151 args[0 ]->IsArrayBuffer () || args[0 ]->IsSharedArrayBuffer ());
5252}
5353
54+ static void IsBoxedPrimitive (const FunctionCallbackInfo<Value>& args) {
55+ args.GetReturnValue ().Set (
56+ args[0 ]->IsNumberObject () ||
57+ args[0 ]->IsStringObject () ||
58+ args[0 ]->IsBooleanObject () ||
59+ args[0 ]->IsBigIntObject () ||
60+ args[0 ]->IsSymbolObject ());
61+ }
62+
5463void InitializeTypes (Local<Object> target,
5564 Local<Value> unused,
5665 Local<Context> context) {
@@ -63,6 +72,7 @@ void InitializeTypes(Local<Object> target,
6372#undef V
6473
6574 env->SetMethodNoSideEffect (target, " isAnyArrayBuffer" , IsAnyArrayBuffer);
75+ env->SetMethodNoSideEffect (target, " isBoxedPrimitive" , IsBoxedPrimitive);
6676}
6777
6878} // anonymous namespace
Original file line number Diff line number Diff line change @@ -57,7 +57,8 @@ for (const [ value, _method ] of [
5757
5858 for ( const key of Object . keys ( types ) ) {
5959 if ( ( types . isArrayBufferView ( value ) ||
60- types . isAnyArrayBuffer ( value ) ) && key . includes ( 'Array' ) ) {
60+ types . isAnyArrayBuffer ( value ) ) && key . includes ( 'Array' ) ||
61+ key === 'isBoxedPrimitive' ) {
6162 continue ;
6263 }
6364
@@ -68,6 +69,15 @@ for (const [ value, _method ] of [
6869 }
6970}
7071
72+ // Check boxed primitives.
73+ [
74+ new Boolean ( ) ,
75+ new Number ( ) ,
76+ new String ( ) ,
77+ Object ( Symbol ( ) ) ,
78+ Object ( BigInt ( 0 ) )
79+ ] . forEach ( ( entry ) => assert ( types . isBoxedPrimitive ( entry ) ) ) ;
80+
7181{
7282 assert ( ! types . isUint8Array ( { [ Symbol . toStringTag ] : 'Uint8Array' } ) ) ;
7383 assert ( types . isUint8Array ( vm . runInNewContext ( 'new Uint8Array' ) ) ) ;
You can’t perform that action at this time.
0 commit comments