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 @@ -1054,10 +1054,31 @@ by `new Boolean()`.
10541054``` js
10551055util .types .isBooleanObject (false ); // Returns false
10561056util .types .isBooleanObject (true ); // Returns false
1057- util .types .isBooleanObject (new Boolean (false )); // Returns true
1058- util .types .isBooleanObject (new Boolean (true )); // Returns true
1057+ util .types .isBooleanObject (new Boolean (false )); // Returns true
1058+ util .types .isBooleanObject (new Boolean (true )); // Returns true
10591059util .types .isBooleanObject (Boolean (false )); // Returns false
1060- util .types .isBooleanObject (Boolean (true )); // Returns false
1060+ util .types .isBooleanObject (Boolean (true )); // Returns false
1061+ ```
1062+
1063+ ### util.types.isBoxedPrimitive(value)
1064+ <!-- YAML
1065+ added: REPLACEME
1066+ -->
1067+
1068+ * ` value ` {any}
1069+ * Returns: {boolean}
1070+
1071+ Returns ` true ` if the value is any boxed primitive object, e.g. created
1072+ by ` new Boolean() ` , ` new String() ` or ` Object(Symbol()) ` .
1073+
1074+ For example:
1075+
1076+ ``` js
1077+ util .types .isBoxedPrimitive (false ); // Returns false
1078+ util .types .isBoxedPrimitive (new Boolean (false )); // Returns true
1079+ util .types .isBoxedPrimitive (Symbol (' foo' )); // Returns false
1080+ util .types .isBoxedPrimitive (Object (Symbol (' foo' ))); // Returns true
1081+ util .types .isBoxedPrimitive (Object (BigInt (5 ))); // Returns true
10611082```
10621083
10631084### 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