Куда идут «null» и «undefined» в массиве при преобразовании массива в строку? - PullRequest
3 голосов
/ 10 марта 2019

Фрагмент ниже объясняет вопрос

//Outside array
console.log(String(undefined)); //undefined
console.log(String(null));      //null
console.log(String(5.55));      //5.55

//inside array

console.log(String([undefined])); // ""
console.log(String([null])); // ""
console.log(String([5.55])); //5.5

Почему null и undefined показывают различное поведение при преобразовании в строку внутри и снаружи массива.

Ответы [ 2 ]

4 голосов
/ 10 марта 2019

Когда массив неявно преобразуется в строку, он вызывает .join(,) для массива:

15.4.4.2 Array.prototype.toString ()

  1. Пусть func будет результатом вызова внутреннего метода [[Get]] для массива с аргументом "join".

И метод .join , в частности , приводит к появлению пустой и неопределенной пустой строки:

15.4.4.5 Array.prototype.join (разделитель)

  1. Если element0 не определен или равен нулю, пусть R будет пустой строкой; в противном случае, пусть R будет ToString (element0).

При значениях, отличных от undefined или null, элемент просто будет вызывать toString.

Другими словами, null и undefined являются двумя специальными исключениями из обычного правила простого приведения элемента в строку.

2 голосов
/ 10 марта 2019

String([]) эквивалентно [].toString(). И что метод toString() делает join() элементы с запятой.

null, undefined, они преобразуются в пустую строку , когда join() по определению.

Если элемент не определен или равен нулю, он преобразуется в пустую строку.

ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join#Description

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...