Javascript 它是Ecmascript-/\S/.test(null)中的错误吗?返回true?
在Actionscript3和Javascript中,这些语句都给出了相同的结果: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是一个对象,在对对象(非字符串)进行测试时,它首先转换为字符串,然
/\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)
returntrue
也这不是一个bug,但你是对的,null
强制执行'null'
,并且该行为在规范中定义:
RegExp.prototype.exec(字符串)!=空
exec
方法的步骤1)Null
'null'
匹配,因此第一个非空格字符,在本例中是字母'n'
var a = null+''; // 'null'
/\S/.test(a); // true
(null+'').match(/\S/) // ["n"]
专业提示:你永远不会在语言或工具中发现bug。只有超级酷的程序员才会这样做。从技术上讲,
null
不是一个对象,它是一个原始值,这种误解已经存在多年了,不幸的是,即使是typeof
操作符也是错误的,因为typeof null==“object”
是完全错误的。遗憾的是,这太晚了,无法在ECMAScript第5版中修复。