Javascript Regex: null - строчная буква?

Может ли кто-нибудь объяснить, почему /[a-z]/.test(null) возвращает true, а /[a-z]/.test(null) возвращает false? Является ли null (или undefined или false) более строчной буквой в Javascript? Спасибо.

Протестировано в Chrome и Firefox.

Ответ 1

Когда вы проверяете что-либо, кроме строки, оно превращается в строку. null превращается в строку 'null'. Попробуйте: console.log(new String(null));

Аналогично для undefined.

Ответ 2

В ECMAScript 5 раздел 15.10.6.3, test в значительной степени является оберткой для exec, которая находится в раздел 15.10.6.2:

RegExp.prototype.exec(строка)

  • Пусть R - этот объект RegExp.
  • Пусть S - значение ToString (string).

...

Таким образом, мы видим, что аргумент test (при передаче до exec) принудительно выполняется с помощью операции ToString. Когда мы смотрим на ToString в раздел 9.8, мы видим таблицу преобразования:

Абстрактная операция ToString преобразует свой аргумент в значение типа String в соответствии с таблицей 13:

Таблица 13 - Преобразования ToString

Argument Type   Result
Undefined     | "undefined"
Null          | "null"
...

Нулевые значения строят строку "null", которая имеет символы нижнего регистра, соответствующие /[a-z]/.

Ответ 3

Так как RegExp.test действует на a String, null будет выдаваться на тип String, поэтому он становится

/[a-z]/.test("null");