]> git.kaiwu.me - njs.git/commitdiff
Array.join() now treats "null" and "undefined" as empty values.
authorIgor Sysoev <igor@sysoev.ru>
Thu, 11 Aug 2016 10:21:46 +0000 (13:21 +0300)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 11 Aug 2016 10:21:46 +0000 (13:21 +0300)
njs/njs_array.c
njs/test/njs_unit_test.c

index b280a82fbd46c219535679e2ad7633db28557c1d..6051a11f07167e52415ab9b230d8e6ef29ad1ab8 100644 (file)
@@ -734,7 +734,10 @@ njs_array_prototype_join(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     for (i = 0; i < array->length; i++) {
         value = &array->start[i];
-        if (njs_is_valid(value) && !njs_is_string(value)) {
+        if (!njs_is_string(value)
+            && njs_is_valid(value)
+            && !njs_is_null_or_void(value))
+        {
             max++;
         }
     }
@@ -755,7 +758,10 @@ njs_array_prototype_join(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
         for (i = 0; i < array->length; i++) {
             value = &array->start[i];
-            if (njs_is_valid(value) && !njs_is_string(value)) {
+            if (!njs_is_string(value)
+                && njs_is_valid(value)
+                && !njs_is_null_or_void(value))
+            {
                 values[n++] = *value;
 
                 if (n >= max) {
@@ -802,7 +808,7 @@ njs_array_prototype_join_continuation(njs_vm_t *vm, njs_value_t *args,
     for (i = 0; i < array->length; i++) {
         value = &array->start[i];
 
-        if (njs_is_valid(value)) {
+        if (njs_is_valid(value) && !njs_is_null_or_void(value)) {
 
             if (!njs_is_string(value)) {
                 value = &values[n++];
@@ -849,7 +855,7 @@ njs_array_prototype_join_continuation(njs_vm_t *vm, njs_value_t *args,
     for (i = 0; i < array->length; i++) {
         value = &array->start[i];
 
-        if (njs_is_valid(value)) {
+        if (njs_is_valid(value) && !njs_is_null_or_void(value)) {
             if (!njs_is_string(value)) {
                 value = &values[n++];
             }
index e6c91db62ce5015adf726698c5b55d4c68d63b35..1fae98b554fc0f250bb01b4c59e85d95e28ccb6d 100644 (file)
@@ -2124,6 +2124,17 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("a = []; a[5] = 5; a.join()"),
       nxt_string(",,,,,5") },
 
+    { nxt_string("var a = [,null,undefined,false,true,0,1]; a.join()"),
+      nxt_string(",,,false,true,0,1") },
+
+    { nxt_string("var o = { toString: function() { return null } };"
+                 "[o].join()"),
+      nxt_string("null") },
+
+    { nxt_string("var o = { toString: function() { return undefined } };"
+                 "[o].join()"),
+      nxt_string("undefined") },
+
     { nxt_string("a = []; a[5] = 5; a"),
       nxt_string(",,,,,5") },