&引用;“生存还是毁灭”;关于JavaScript中的变量
只是简单介绍一下JavaScript。我习惯于经常测试C++中指针的存在,以免崩溃。 我从未读过《哈姆雷特》,但我读过JavaScript中的&引用;“生存还是毁灭”;关于JavaScript中的变量,javascript,variables,null,Javascript,Variables,Null,只是简单介绍一下JavaScript。我习惯于经常测试C++中指针的存在,以免崩溃。 我从未读过《哈姆雷特》,但我读过JavaScript中的null和undefined 简而言之,我可以: if (varname == null) if (varname === null) if (typeof(varname) != 'undefined') if (varname != undefined) if ('varname' in object) if (object.hasOwnPrope
null
和undefined
简而言之,我可以:
if (varname == null)
if (varname === null)
if (typeof(varname) != 'undefined')
if (varname != undefined)
if ('varname' in object)
if (object.hasOwnProperty('varname'))
老实说,这对我来说有点太过分了:)。JavaScript中测试变量以避免崩溃的经典方法是什么?通常的方法是使用值的真实性
if(varname){
}
这涵盖了您给出的大多数示例这取决于您对变量的处理方式
null
可能是也可能不是一个完全可以接受的值,这取决于上下文(但我必须承认,我从来没有在javascript中找到过对null
的良好使用)。也许最安全的方法是在出现问题时依靠异常来发现问题,而不是通过检查变量的存在来预测错误
另一方面,如果将某个内容与null
或未定义的进行比较,最好使用==
运算符,它不需要类型强制
更简单的检查if(variable)
将检查variable
是否为falsy(也就是说,它不是null
,未定义的,false
,0
,NaN
,-0
或空字符串)
最后,当您想要循环对象的属性并排除从原型继承的属性时,方法hasOwnProperty
通常很有用
编辑注意上面提到的是未定义的变量,即声明为
var variable;
但未指定任何值,或函数中缺少参数。人们可能还想考虑处理那些根本没有声明的变量的情况。在这种情况下,所有测试都像
if(variable);
if(variable === null);
以此类推将失败,并报告错误。我知道处理这种情况的唯一安全方法是检查变量的类型。也就是说,typeof
操作符可以温和地处理不存在的变量
if(typeof variable === 'undefined')
如果
变量
已声明但未定义,或
变量
根本没有声明
在任何情况下,最后一次检查都不会触发错误。由于读取未声明的全局变量时抛出错误,最好使用第三个示例,即typeof
示例检查变量
if (varname == null)
if (varname != undefined)
将告诉您该值是否已定义并为null,如果未声明,则抛出错误
if (varname === null)
if (typeof(varname) != 'undefined')
将告诉您该值是否已定义且完全为null,如果未声明,将抛出错误
if (varname === null)
if (typeof(varname) != 'undefined')
将在不引发错误的情况下告诉您是否定义了变量
if (varname != undefined)
与第一个相反
if ('varname' in object)
将告诉您对象本身或其原型链上的某个位置是否有属性。这不能保证对宿主对象有效
if (object.hasOwnProperty('varname'))
将告诉您对象是否有自己的属性,忽略原型链。
如果已设置名为“hasOwnProperty”的属性,则此操作将中断
if (Object.hasOwnProperty.call(object, 'varname'))
是上一个版本的更可靠版本。你需要了解的第一件事是严格的平等与真实或错误。严格使用三个等号,而真实使用2
这些都是等效的:
var a = false;
if(!a)
if(a == false)
if(a != true)
if(a == 0)
if(a == "")
使用三个标志是严格的。False表示虚假,而不是“虚假”:
接下来,null和undefined之间有一点区别。Null表示已声明但未设置(字面上设置为“Null”),未定义表示已声明但未设置:
window.a;
console.log(a); // undefined
window.a = null;
console.log(a); // null
最后,您不会将typeof用于true或false。这对于字符串或对象类型的东西来说更重要。对象中的变量是属性,而不是变量,处理方式略有不同。最初的问题是:JavaScript中测试变量以避免崩溃的经典方法是什么
这可能是一种经典的方式,也是一种非常实用的方式:
首先,您永远不应该有未声明的变量。用以确保你不会
如果您认为a
是数字,If(a!=null)
会告诉您其中是否有值(尽管可能是NaN),而If(a)
会告诉您其中是否有非零值
如果您认为a
是一个字符串,If(a!=null)
将告诉您其中是否有值(尽管可能是空字符串),而If(a)
将告诉您字符串中是否至少有一个字符
如果您相信a
是一个对象,If(a)
将告诉您它是否已定义。推论:如果(a&&a.prop==7)
是检查属性值的安全方法
如果你不知道a
应该是什么,那么你仍然可以用If(a)
安全地测试它,尽管我不能肯定结果会有多有用
(同样,如果您不知道a
应该是什么,您会遇到比这里可以解决的问题更大的问题。)True,但请注意,如果变量包含零或空字符串,它也会被视为false
。-1:如果。。。那么,varname是未定义的;-)@胶囊啊。。。难道没有一行语句吗?这通常不是你想要的。您最终将拒绝完全合法的值,例如0或false。@许多人,实际上,当varname
未声明时,它将失败,但是当它被声明但没有定义时就不会了。无事生非可能是另一个需要阅读的剧本:-)我从来都不需要在javascript o中测试它。O@Renanlf你的脚本总是天衣无缝吗?是的。。。工作很好。。。但我不记得做了一些真正不同的事情,然后为HTML标签设置了一些CSS或值或属性。。。最复杂的代码是javascript中的基数排序。。。所以我从不担心