任何人都可以解释为什么/[a-z]/.test(null)
会在true
返回/[A-Z]/.test(null)
时返回false
? null
(或undefined
或false
)在Javascript中被视为小写字母吗?感谢。
在Chrome和Firefox上测试过。
答案 0 :(得分:13)
当您测试除String之外的任何内容时,它将变为String。 null
变为字符串'null'
。试一试:console.log(new String(null));
同样适用于undefined
。
答案 1 :(得分:4)
根据ECMAScript 5的section 15.10.6.3,test
主要是exec
的包装器,位于section 15.10.6.2:
RegExp.prototype.exec(字符串)
- 设R为此RegExp对象。
- 设S为ToString(string)的值。
醇>...
因此,我们看到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.test
对String
采取行动,null
将被投放到String
类型,因此它变为
/[a-z]/.test("null");