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