这是Ecmascript中的错误 - /\S/.test(null)返回true吗?

Lau*_*erd 5 javascript regex actionscript-3

在Actionscript3和Javascript中,这些语句都给出了相同的结果:

/\S/.test(null) => true  
/null/.test(null) => true  
/m/.test(null) => false  
/n/.test(null) => true  
Run Code Online (Sandbox Code Playgroud)

在这种情况下,似乎将null值转换为字符串"null".

这是Ecmascript中的已知错误还是我错过了什么?

CMS*_*CMS 11

这是不是一个错误,但是你是对的,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"]
Run Code Online (Sandbox Code Playgroud)