基于String.prototype自定义字符串比较方法的技术咨询
关于自定义String.prototype.compare方法的合理性与正确应用
一、先聊聊这个方法的合理性
你写的这个compare方法,本质上就是直接返回this === val,功能和JS原生的严格相等运算符===完全一致——既比较值,也比较类型。从实用角度来说,它并没有提供原生运算符之外的额外价值,属于重复造轮子。
另外,直接修改String.prototype还有个需要留意的点:原型链污染风险。如果其他代码也给String.prototype添加了同名的compare方法,就会出现覆盖冲突,导致预期外的bug。所以除非你的方法能提供独特的、原生不具备的能力,否则不建议随便修改内置对象的原型。
二、如果一定要用这个方法,正确的应用方式
你的getSelectValue函数里,原本用的是selectedValue === "stackoverflow",换成自定义方法的话,只需要把比较逻辑改成调用compare即可。因为selectedValue是从DOM元素获取的字符串,属于String实例,能直接调用原型上的compare方法:
function getSelectValue() { var selectedValue = document.getElementById("dropdownList").value; if(selectedValue.compare("stackoverflow")) { // 这里调用自定义的compare方法 document.getElementById("name").value = "Stack Overflow"; } else { document.getElementById("name").value = "..."; // 记得补全这里的代码闭合哦 } }
三、给你提个优化建议
如果想让这个compare方法更实用,不如扩展它的功能,比如支持忽略大小写的比较,或者处理null/undefined的情况,举个例子:
String.prototype.compare = function(val, ignoreCase = false) { // 先处理val不是字符串的情况 if (typeof val !== 'string') return false; // 根据参数决定是否忽略大小写 return ignoreCase ? this.toLowerCase() === val.toLowerCase() : this === val; }
这样调用的时候就可以灵活选择:
- 严格相等:
selectedValue.compare("stackoverflow") - 忽略大小写:
selectedValue.compare("STACKOVERFLOW", true)
内容的提问来源于stack exchange,提问作者Suresh Ponnukalai
相关产品推荐
相关产品推荐

