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

Jquery 为什么在这种情况下我没有犯任何错误,jquery,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'

我正在检查两个字符串是否相等,而不考虑大小写和空格

我使用的代码是:

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()
,但为什么它没有抛出错误呢?这是我的小提琴


请告诉我这是否为有效检查。

因为JavaScript将
tri
解释为返回的大写字符串对象的属性。不存在这样的属性,但是如果试图检索不存在的属性,JavaScript不会出错——它只会返回未定义的属性

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

这是因为
Javascript
假设它是一个
属性
,而在comaprision中,未定义和trim返回false

您的代码将导致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

尝试访问不存在的属性将返回未定义。您正在将未定义的内容与失败的内容进行比较。。。所以它实际上不是一个错误,因为
checkequality
is返回布尔值。在这种情况下没有运行时错误。无论何时,如果未定义,那么bool总是返回false。尝试调用
.tri()
,就像调用一个方法一样-现在您将看到预期的错误。