使用变量与获取输入值时 substr() 的不同结果

Different outcome of substr() when using variable vs getting input value

我有一些 javascript 在几个地方使用来检查电子邮件地址的最后 3 个字符。我不明白的是,为什么我在获取设置变量的子字符串时与获取输入值时得到不同的结果。

下面的代码将提醒值:"com"

var email = "blah@test.com";
alert(email.toLowerCase().substr(email.length - 3, 3));

但是,这段获取输入值的代码会发出一个值警报:"om"

alert($("#email").val().toLowerCase().substr($("#email").length - 3, 3));

谁能给我解释一下为什么上面两行代码会有不同的结果?

这是一个JSFIDDLE

尝试传递文本框valuelength,而不是selected elements

length
alert($("#email").val().toLowerCase().substr($("#email").val().length - 3, 3));
//-------------------------------------------------------^^^^^

实现这一目标的最佳方法是,

var value = $("#email").val().toLowerCase();
alert(value.substr(-3)); 

以负数传递起始值将从后面剥离字符串。

DEMO