5
var p = "null"
var q = null;
(p == q) //false. as Expected.

p.replace(null, "replaced") // outputs replaced. Not expected.
p.replace("null", "replaced") //outputs replaced. Expected.

q.replace(null, "replaced") // error.  Expected.
q.replace("null", "replaced") //error. Expected.

なんで?replace は と を区別しません"null"null?

angularjs でバグに遭遇したので質問します。

replace((pctEncodeSpaces ? null : /%20/g), '+');

たとえば、誰かが のユーザー名を持っていて、"null"それが URL として使用された場合、すべての$http呼び出しで「+」に置き換えられます。例えばGET /user/null

このシナリオが頻繁に発生するわけではありませんが、なぜ扱いnull"null"同じものに置き換えるのか、もっと興味があります。replace は、置換を行う前に .tostring を実行しnullますか? これはJavascriptの単なる癖ですか?

IE と Chrome の両方の実装でこれを確認しましたreplace

4

4 に答える 4