И в Actionscript3 и в JavaScript эти операторы дают тот же результат:
/\S/.test(null) => true
/null/.test(null) => true
/m/.test(null) => false
/n/.test(null) => true
Кажется, что нулевое значение преобразовывается в строку "пустой указатель" в этом случае.
Действительно ли это - известная ошибка в Ecmascript, или я пропускаю что-то?
Это не ошибка, но вы правы, null
приводит к 'null'
и это поведение определено в спецификации:
RegExp.prototype.test (string)
, внутренне эквивалентно выражению: RegExp.prototype.exec (string)! = null
] Тип метода exec
преобразует первый аргумент в строку, используя внутреннюю операцию ToString
(см. Шаг 1 метода exec
). ToString
явно возвращает «null»
, когда вход имеет тип
Null
. В заключение, в ваших примерах RegExp соответствует строке 'null'
, поэтому первый непробельный символ, в данном случае буква 'n'
.
var a = null+''; // 'null'
/\S/.test(a); // true
(null+'').match(/\S/) // ["n"]
null
- это объект , и при тестировании с объектами (не строковыми) он сначала преобразуется в строку, а затем дает вам этот результат.
Вы можете попробовать использовать /Number/.test (Number)
или /String/.test (String)
, которые также вернут true
.
Вероятно, вызывается String (null)
, то есть 'null'
String (Number)
даст
function Number() {
[native code]
}
и / function Number /. test (Number)
return true
тоже