Javascript Regex:null是小写字母?

时间:2015-02-12 14:09:30

标签: javascript regex

任何人都可以解释为什么/[a-z]/.test(null)会在true返回/[A-Z]/.test(null)时返回falsenull(或undefinedfalse)在Javascript中被视为小写字母吗?感谢。

在Chrome和Firefox上测试过。

3 个答案:

答案 0 :(得分:13)

当您测试除String之外的任何内容时,它将变为String。 null变为字符串'null'。试一试:console.log(new String(null));

同样适用于undefined

答案 1 :(得分:4)

根据ECMAScript 5的section 15.10.6.3test主要是exec的包装器,位于section 15.10.6.2

  

RegExp.prototype.exec(字符串)

     
      
  1. 设R为此RegExp对象。
  2.   
  3. 设S为ToString(string)的值。
  4.         

    ...

因此,我们看到test的参数(传递给exec时)是通过ToString操作强制执行的。当我们在section 9.8中查看ToString时,我们会看到转换表:

  

抽象操作ToString根据表13将其参数转换为String类型的值:

     

表13 - ToString转换

Argument Type   Result
Undefined     | "undefined"
Null          | "null"
...

空值将字符串化为字符串"null",其中包含与/[a-z]/匹配的小写字符。

答案 2 :(得分:1)

由于RegExp.testString采取行动,null将被投放到String类型,因此它变为

/[a-z]/.test("null");