From: Igor Sysoev Date: Thu, 11 Aug 2016 10:21:46 +0000 (+0300) Subject: Array.join() now treats "null" and "undefined" as empty values. X-Git-Tag: 0.1.1~5 X-Git-Url: http://git.kaiwu.me/%7B@url%7D?a=commitdiff_plain;h=777b1ab0a82000a4b9ff5aa8f16102c223e9aae5;p=njs.git Array.join() now treats "null" and "undefined" as empty values. --- diff --git a/njs/njs_array.c b/njs/njs_array.c index b280a82f..6051a11f 100644 --- a/njs/njs_array.c +++ b/njs/njs_array.c @@ -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++]; } diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index e6c91db6..1fae98b5 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -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") },