对于各种javascript应用程序,我经常使用一个名为isBlank()的小函数:
isBlank = function(text) {
while(text[0] == ' ') text = text.substr(1);
return (text === '');
}
所有这个函数都是从输入字符串的开头删除所有空格,然后如果结果为空,则返回true或false。所以我试着把这个函数变成一个String原型,如下所示:
String.prototype.isBlank = function() {
while(this[0] == ' ') this = this.substr(1);
return (this === '');
}
但是,当您尝试以下操作时,原型版本会出现“无效左手分配”错误:
" ".isBlank();
ReferenceError: Invalid left-hand side in assignment
我想这个问题源于我在while循环中重新分配'this'对象的事实,但由于我还在学习java脚本,我想知道是否有人能够更详细地解释为什么这个原型不起作用。我对这个问题的理论方面更感兴趣,并且对如何将isBlank()函数变成符合我想要的字符串原型并不感兴趣。
谢谢!
答案 0 :(得分:3)
你不能重新分配这个。这就是错误所说的。
10.1.7此
这个值与每个活动的执行上下文相关联。 此值取决于调用者和代码类型 执行并在控制进入执行上下文时确定。 与执行上下文关联的此值是不可变的。
另一个链接explaining this
答案 1 :(得分:2)
您永远不能分配到this
keyword。如果要分配,则需要创建一个额外的变量,如下所示:
String.prototype.isBlank = function() {
var text = this;
while(text[0] == ' ') text = text.substr(1);
return (text === '');
}
顺便说一下:并非所有浏览器都支持通过括号表示法访问单个字符,您应该使用.charAt()
。此外,regular expression有时会让生活更轻松:
String.prototype.isBlank = function() {
return /^ *$/.test(this);
}
答案 2 :(得分:1)
String.prototype.isBlank = function() {
return (this.trim() === '');
}