Может ли кто-нибудь объяснить, почему /[a-z]/.test(null) возвращает true, а /[a-z]/.test(null) возвращает false? Является ли null (или undefined или false) более строчной буквой в Javascript? Спасибо.
Протестировано в Chrome и Firefox.
Ответ 1
Когда вы проверяете что-либо, кроме строки, оно превращается в строку. null превращается в строку 'null'. Попробуйте: console.log(new String(null));
Таким образом, мы видим, что аргумент 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, поэтому он становится