11

谁能解释一下原因吗/[a-z]/.test(空)收益真的虽然/[A-Z]/.测试(空)收益? 无效的(或未定义)被认为是Javascript中的小写字母?谢谢。

在Chrome和Firefox上测试。

1
  • 1
    只是猜测,因此没有作为答案发布:也许它是根据值的字符串表示进行测试的,因此“false”或“undefined”的“null”将包含小写字母。
    – 蠕虫
    评论 2015年2月12日14:11

3个答案

重置为默认值
13

当您测试除字符串之外的任何东西时,它都会变成字符串。无效的变成了字符串“null”。试试看:console.log(新字符串(null));

同样适用于未定义.

5
  • 但是/[a-z]/.测试(NaN)也是真的
    – 格非
    评论 2015年2月12日14:13
  • 1
    哦,JavaScript。一定很喜欢。 评论 2015年2月12日14:13
  • 4
    @格菲是的,是小写匹配。
    – 壁炉
    评论 2015年2月12日14:13
  • 我想补充一下RegExp/x个/匹配测试字符串包含 x个。“NaN”包含小写的“a”,这就是它匹配的原因。
    – 蠕虫
    评论 2015年2月12日14:14
  • 嗯,输出console.log(新字符串(null))看起来可能令人惊讶。Javascript在这里实际做的是字符串(null),不是新建字符串.
    – 乔治
    评论 2015年2月12日14:37
4

根据ECMAScript 5第15.10.6.3条,测试基本上是执行官,它位于第15.10.6.2节:

RegExp.prototype.exec(字符串)

  1. 让R成为这个RegExp对象。
  2. 设S为ToString(字符串)的值。

...

因此,我们看到测试(当传递给执行官)通过ToString(目标字符串)操作。当我们在中查看ToString时第9.8节我们可以看到转换表:

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

表13-ToString转换

参数类型结果未定义|“Undefined”Null|“Null”...

字符串的空值字符串“空”,它具有匹配的小写字符/【a-z】/.

1

RegExp.测试作用于字符串,无效的将按类型铸造字符串,所以它变成

/[a-z]/.test(“空”);
1
  • 解释否决票。。今天被随机否决了很多。 评论 2015年2月12日14:18

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.