两个基于ActionScript3和Javascript这些语句产生相同的结果:它是Ecmascript中的错误 - /S/.test(null)是否返回true?
/\S/.test(null) => true
/null/.test(null) => true
/m/.test(null) => false
/n/.test(null) => true
似乎空值转换成在这种情况下,字符串“null”。
这是Ecmascript中的一个已知错误还是我错过了什么?
两个基于ActionScript3和Javascript这些语句产生相同的结果:它是Ecmascript中的错误 - /S/.test(null)是否返回true?
/\S/.test(null) => true
/null/.test(null) => true
/m/.test(null) => false
/n/.test(null) => true
似乎空值转换成在这种情况下,字符串“null”。
这是Ecmascript中的一个已知错误还是我错过了什么?
这是不是一个错误,但是你是对的,null
胁迫到'null'
并且该行为在sp上定义EC:
RegExp.prototype.test(string)
,内部是相当于表达式:RegExp.prototype.exec(string) != null
exec
方法类型的第一个参数转换为字符串,使用ToString
内部操作(看起来exec
方法的步骤1)。ToString
内部操作,明确返回"null"
当输入是 类型Null
。总之,在你的例子中,正则表达式配衬对字符串'null'
,所以第一个非空格字符,在这种情况下,信'n'
。
var a = null+''; // 'null'
/\S/.test(a); // true
(null+'').match(/\S/) // ["n"]
null
是对象,以及对对象(非字符串),其首先被转换为字符串,然后测试其时给出这样的结果。
您可以试用/Number/.test(Number)
或/String/.test(String)
,这也会返回true
。
大概String(null)
被调用,这是'null'
String(Number)
会给
function Number() {
[native code]
}
和/function Number/.test(Number)
返回true
太
专业提示:您永远不会在语言或工具中发现错误。只有超级酷的程序员才能这样做。 – Marius 2010-03-12 04:57:07