关于JavaScript中的变量的"成为或不成为"

Ste*_*and 10 javascript variables null

只是对JavaScript做一点介绍.我习惯于经常在C++中测试指针的存在,以免崩溃.

从来没有我读哈姆雷特,但我阅读此页有关nullundefined在JavaScript中.

在坚果壳中,我可以:

if (varname == null)
if (varname === null)
if (typeof(varname) != 'undefined') 
if (varname != undefined)
if ('varname' in object) 
if (object.hasOwnProperty('varname')) 
Run Code Online (Sandbox Code Playgroud)

老实说,这对我来说有点太多了:).JavaScript中用于测试变量以避免崩溃的经典方法是什么?

Mik*_*uel 12

由于读取未声明的全局变量的错误,最好使用第三个示例(typeof示例)来检查变量.

if (varname == null)
Run Code Online (Sandbox Code Playgroud)

将告诉您该值是否已定义并且为null并且如果未声明则抛出错误.

if (varname === null)
Run Code Online (Sandbox Code Playgroud)

将告诉您是否定义了值并且确切为null并且如果未声明则抛出错误.

if (typeof(varname) != 'undefined')
Run Code Online (Sandbox Code Playgroud)

会告诉你是否定义了变量而没有抛出错误.

if (varname != undefined)
Run Code Online (Sandbox Code Playgroud)

与第一个相反.

if ('varname' in object)
Run Code Online (Sandbox Code Playgroud)

将告诉您对象本身或其原型链中的某个属性是否具有属性.这不能保证适用于主机对象.

if (object.hasOwnProperty('varname'))
Run Code Online (Sandbox Code Playgroud)

将告诉您对象是否具有自己的属性,忽略原型链.如果已设置名为"hasOwnProperty"的属性,则会中断.

if (Object.hasOwnProperty.call(object, 'varname'))
Run Code Online (Sandbox Code Playgroud)

是最后一个更可靠的版本.

  • 关于`varname`未声明的时候有太多的大惊小怪 - 很可能你想要**因为输入错误而抛出一个错误.`varname == null`是最有用的测试之一,因为它适用于`null`和`undefined`.尽管如此,还是很好的答案+1. (2认同)