这个小问题让我有5个小时的时间来修复。最后我想通了。看到这段代码:
<script language="JavaScript" type="text/javascript">
var x;
.... // a lot of codes here
var k=x.trim();
</script>
以上代码使整个应用程序停止运行!
我记得以前我曾经这样做但没有问题。
所以,关于var x; ... x.trim();
,为什么有时它会允许,但有时它会使其余代码停止工作?
它的最佳代码实践是什么?
答案 0 :(得分:1)
你可以这样做:
if(typeof x === 'undefined'){
// your get an error message
}
else
{
var k=x.toString().trim();
}
上面使用严格相等运算符===
是个好主意,因为在JS中,你可以将变量命名为undefined:
var undefined = "something";
因此,使用===可确保您确实检查变量的未定义值。
答案 1 :(得分:0)
trim
是String
的函数。请参阅MDN - String.trim()。
因此,当您将其应用于整数时,它会失败并抛出错误,导致代码停止工作
try{
var a = 1;
console.log(a.trim());
}
catch(ex){
console.log(ex);
}
&#13;
您可以尝试使用.toString()
将数字转换为字符串,然后应用.trim()
try{
var a = 1;
console.log(a.toString().trim());
}
catch(ex){
console.log(ex);
}
&#13;
答案 2 :(得分:0)
我会扩展Rajesh的答案。他是对的,当你尝试调用一个不存在的方法时,会抛出一个TypeError。最简单和万无一失的方法是使用try / catch来确保其余代码按原样执行。但即使它确实存在,也不会得到你想要的结果。
我认为最好的方法是将你拥有的值包装到String对象中。它就像
一样简单var k = String(x).trim();
它做了几件重要的事情:
x
的值转换为字符串,即当您检查其类型时,它总是'string'
并且始终是String对象的实例。trim
具有应有的功能。可能存在一些陷阱。如果x
未定义,null,NaN或对象,则String(x)
的结果相应地为'undefined'
,'null'
,'NaN'
或{{ 1}}。如果'[object Object]'
是一个数组,那么它就是一个特定的情况,其值与调用x
时的值相同,例如
x.join(',')
所以请始终牢记您正在处理的类型。
就像使用String一样,您可以将变量转换为其他类型,但天真地将任何内容转换为数字,字符串或数组都被认为是一种非常糟糕的做法。你应该总是确定你正在使用什么类型。