Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“生存还是毁灭”;关于JavaScript中的变量_Javascript_Variables_Null - Fatal编程技术网

&引用;“生存还是毁灭”;关于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

只是简单介绍一下JavaScript。我习惯于经常测试C++中指针的存在,以免崩溃。 我从未读过《哈姆雷特》,但我读过JavaScript中的
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中的基数排序。。。所以我从不担心