Javascript replace null
Javascript replace null
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.
为什么?替换不区分"null"
和null
吗?
我问这个问题是因为我在angularjs中遇到了一个bug:
replace((pctEncodeSpaces ? null : /%20/g), '+');
例如,如果有人有"null"
的用户名,它被用作url,它将在任何$http
调用上被替换为"+"。例:GET /user/null
;
并不是说这种情况会经常发生,但我更好奇的是为什么replace将null
和"null"
视为同一件事。替换在null
上做一个。tostring替换之前?这只是Javascript的一个怪癖吗?
我在IE和Chrome的replace
实现上验证了这一点。
是的,根据 replace
的规范(加粗的相关行,或ECMA-262最终草案 第146页),这是预期的。检查第一个参数是否为正则表达式,如果不是,则调用toString()
(好吧,以某种方式转换为字符串)。
15.5.4.11
String.prototype.replace(searchValue, replaceValue)
让string表示将this值转换为字符串的结果。
剪短
如果
searchValue
不是正则表达式,让searchString
为ToString(searchValue)
,并查找第一次出现的字符串searchString
。设m为0剪短
在ES5规范中对于String.prototype.replace
:
15.5.4.11 String.prototype.replace (searchValue, replaceValue)
…
如果
searchValue
不是正则表达式,则令searchString
为ToString(searchValue)
,并在string
中查找第一次出现的searchString
因此,"".replace(null, XXX)
确实会将null
转换为字符串"null"
注意,ToString()
的不是表示null.toString()
——它是JavaScript解释器内部定义的操作。
对于意料之外的问题,有一个简单的答案。null被replace()方法转换为字符串。
这也是一个预期动作
"null".replace(null, "replaced") // outputs replaced. Not expected.
不区分"null"answers"null"
这是因为replace
参数1被转换为String。
''+null === "null"; // true by cast to string
此外,由于replace
接受RegExp对象,您还可以考虑如何
RegExp(null).toString() === "/null/"; // true
- 数组在递归方法中设置为null
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 来自文本输入null的html javascript变量
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- php代码在textbox更改事件上显示null
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- ajax在输入等于null时进行检查
- html+javascript:如何在某些条件下禁用dropdownlist中的null选项
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- contentWindow.document.body is null
- 在经过DATE验证的列中创建null值
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- 如何在javascript中使用string.replace.将匹配字符串开头的两个不同表达式替换为null
- Javascript replace null
- CKEDITOR.replace(elm[0])在Chrome上返回null