Действительно ли это - ошибка в Ecmascript-/\S/.test (пустой указатель) возвращает true?

И в Actionscript3 и в JavaScript эти операторы дают тот же результат:

/\S/.test(null) => true  
/null/.test(null) => true  
/m/.test(null) => false  
/n/.test(null) => true  

Кажется, что нулевое значение преобразовывается в строку "пустой указатель" в этом случае.

Действительно ли это - известная ошибка в Ecmascript, или я пропускаю что-то?

5
задан YOU 12 March 2010 в 05:06
поделиться

2 ответа

Это не ошибка, но вы правы, null приводит к 'null' и это поведение определено в спецификации:

  1. RegExp.prototype.test (string) , внутренне эквивалентно выражению: RegExp.prototype.exec (string)! = null
  2. ] Тип метода exec преобразует первый аргумент в строку, используя внутреннюю операцию ToString (см. Шаг 1 метода exec ).
  3. Внутренняя операция ToString явно возвращает «null» , когда вход имеет тип Null .

В заключение, в ваших примерах RegExp соответствует строке 'null' , поэтому первый непробельный символ, в данном случае буква 'n' .

var a = null+''; // 'null'
/\S/.test(a); // true
(null+'').match(/\S/) // ["n"]
11
ответ дан 18 December 2019 в 13:13
поделиться

null - это объект , и при тестировании с объектами (не строковыми) он сначала преобразуется в строку, а затем дает вам этот результат.

Вы можете попробовать использовать /Number/.test (Number) или /String/.test (String) , которые также вернут true .

Вероятно, вызывается String (null) , то есть 'null'

String (Number) даст

function Number() {
    [native code]
}

и / function Number /. test (Number) return true тоже

3
ответ дан 18 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: