最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Is it a bug in Ecmascript - S.test(null) returns true? - Stack Overflow

programmeradmin0浏览0评论

Both in Actionscript3 and Javascript these statements give the same result:

/\S/.test(null) => true  
/null/.test(null) => true  
/m/.test(null) => false  
/n/.test(null) => true  

Seems that null value is converted into string "null" in this case.

Is this a known bug in Ecmascript or am I missing something?

Both in Actionscript3 and Javascript these statements give the same result:

/\S/.test(null) => true  
/null/.test(null) => true  
/m/.test(null) => false  
/n/.test(null) => true  

Seems that null value is converted into string "null" in this case.

Is this a known bug in Ecmascript or am I missing something?

Share Improve this question edited Mar 12, 2010 at 5:06 YOU 124k34 gold badges190 silver badges222 bronze badges asked Mar 12, 2010 at 4:51 Lauri OherdLauri Oherd 1,4031 gold badge13 silver badges15 bronze badges 1
  • 8 Pro tip: You will never find a bug in a language or a tool. Only super cool programmers do that. – Marius Commented Mar 12, 2010 at 4:57
Add a ment  | 

2 Answers 2

Reset to default 11

It's not a bug, but you are right, null coerces to 'null' and that behavior is defined on the spec:

  1. RegExp.prototype.test(string), internally is equivalent to the expression: RegExp.prototype.exec(string) != null
  2. The exec method type converts the first argument to string, using the ToString internal operation (look the Step 1 of the exec method).
  3. The ToString internal operation, explicitly returns "null" when the input is of type Null.

In conclusion, in your examples, the RegExp matchs against the string 'null', so the first non-space character, in this case the letter 'n'.

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

null is an object, and when testing against objects (non-string), its first converted to string, then its giving you that result.

You could try with /Number/.test(Number) or /String/.test(String), which would return true too.

Probably String(null) is being called, which is 'null'

String(Number) will give

function Number() {
    [native code]
}

and /function Number/.test(Number) return true too

发布评论

评论列表(0)

  1. 暂无评论