Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 它是Ecmascript-/\S/.test(null)中的错误吗?返回true?_Javascript_Regex_Actionscript 3 - Fatal编程技术网

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

Javascript 它是Ecmascript-/\S/.test(null)中的错误吗?返回true?,javascript,regex,actionscript-3,Javascript,Regex,Actionscript 3,在Actionscript3和Javascript中,这些语句都给出了相同的结果: /\S/.test(null) => true /null/.test(null) => true /m/.test(null) => false /n/.test(null) => true 在本例中,null值似乎被转换为字符串“null” 这是Ecmascript中的已知错误还是我遗漏了什么?null是一个对象,在对对象(非字符串)进行测试时,它首先转换为字符串,然

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

/\S/.test(null) => true  
/null/.test(null) => true  
/m/.test(null) => false  
/n/.test(null) => true  
在本例中,null值似乎被转换为字符串“null”

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

null
是一个对象,在对对象(非字符串)进行测试时,它首先转换为字符串,然后给出结果

您可以尝试使用
/Number/.test(Number)
/String/.test(String)
,这也会返回
true

可能正在调用
String(null)
,即
'null'

字符串(数字)
将给出

function Number() {
    [native code]
}

/function Number/.test(Number)
return
true
也这不是一个bug,但你是对的,
null
强制执行
'null'
,并且该行为在规范中定义:

  • ,内部等效于表达式:
    RegExp.prototype.exec(字符串)!=空
  • 方法类型使用内部操作将第一个参数转换为字符串(查看
    exec
    方法的步骤1)
  • 当输入为空时,内部操作显式返回“null” 键入
    Null
  • 总之,在您的示例中,RegExp与字符串
    'null'
    匹配,因此第一个非空格字符,在本例中是字母
    'n'

    var a = null+''; // 'null'
    /\S/.test(a); // true
    (null+'').match(/\S/) // ["n"]
    

    专业提示:你永远不会在语言或工具中发现bug。只有超级酷的程序员才会这样做。从技术上讲,
    null
    不是一个对象,它是一个原始值,这种误解已经存在多年了,不幸的是,即使是
    typeof
    操作符也是错误的,因为
    typeof null==“object”
    是完全错误的。遗憾的是,这太晚了,无法在ECMAScript第5版中修复。