为什么我在这种情况下没有收到任何错误

时间:2015-04-20 11:31:55

标签: jquery

我正在检查两个字符串是否相等而不管它们的大小写和空格。

我正在使用此代码:

var reqstr = 'Test   ' ;
var requested_data_one = 'Test ' ;

var checkequality = reqstr.toUpperCase().tri === requested_data_one.toUpperCase().trim();

if(checkequality){   
    alert('yes');
} else {
    alert('no');
}

如上所示,我故意提供tri而不是trim(),但为什么不提出错误?这是我的小提琴

http://jsfiddle.net/dpL73v2y/

如果这是有效的检查,请告诉我。

3 个答案:

答案 0 :(得分:4)

因为JavaScript将tri解释为返回的大写字符串对象的属性。不存在这样的属性,但是如果您尝试检索不存在的属性,JavaScript将不会出错 - 它将仅返回undefined。

"foo".toUpperCase().bar; //undefined

答案 1 :(得分:2)

您的代码将导致tri被视为不存在的属性

var checkequality = reqstr.toUpperCase().tri === requested_data_one.toUpperCase().trim();

但是,如果将tri更改为方法调用,则会出现错误

var checkequality = reqstr.toUpperCase().tri() === requested_data_one.toUpperCase().trim();
// TypeError: reqstr.toUpperCase(...).tri is not a function

答案 2 :(得分:1)

这是因为Javascript假设它是property,而在comaprision中,undefined和trim返回false