java检查变量是否定义_JavaScript检查变量是否存在(已定义/初始化)

哪种方法检查变量是否已初始化是更好/正确的方法? (假设变量可以容纳任何内容(字符串,整数,对象,函数等)。

if (elem) { // or !elem

要么

if (typeof(elem) !== 'undefined') {

要么

if (elem != null) {

#1楼

在JavaScript中,可以定义一个变量,但是将其值保留为undefined ,因此最常见的答案在技术上并不正确,而是执行以下操作:

if (typeof v === "undefined") {

// no variable "v" is defined in the current scope

// *or* some variable v exists and has been assigned the value undefined

} else {

// some variable (global or local) "v" is defined in the current scope

// *and* it contains a value other than undefined

}

这可能足以满足您的目的。 以下测试具有更简单的语义,这使得更容易精确地描述代码的行为并亲自理解(如果您关心这样的事情):

if ("v" in window) {

// global variable v is defined

} else {

// global variable v is not defined

}

当然,这假定您正在浏览器中运行(其中window是全局对象的名称)。 但是,如果您想像这样的全局变量,则可能是在浏览器中。 从主观上讲, 'name' in window使用'name' in window样式上与使用window.name引用全局变量一致。 作为window属性而不是变量访问全局变量,可以使您在代码中引用的未声明变量的数量最少(以利于衬里),并避免全局变量被局部变量覆盖的可能性。 另外,如果全局对象使您的皮肤爬行,则仅用此相对较长的棍子接触它们时,您可能会感到更舒适。

#2楼

if (typeof console != "undefined") {

...

}

或更好

if ((typeof console == "object") && (typeof console.profile == "function")) {

console.profile(f.constructor);

}

适用于所有浏览器

#3楼

在问题概述的特定情况下,

typeof window.console === "undefined"

与...相同

window.console === undefined

我更喜欢后者,因为它更短。

请注意,我们仅在全局范围(在所有浏览器中都是window对象)中查找console 。 在这种特殊情况下,这是可取的。 我们不希望在其他地方定义console 。

@BrianKelley在他的出色回答中解释了技术细节。 我仅添加了缺少的结论,并将其摘要为更易于阅读的内容。

#4楼

最高答案是正确的,请使用typeof。

但是,我想指出的是,在JavaScript中, undefined是可变的(出于某些不敬虔的原因)。 因此,仅检查varName !== undefined就有可能无法总是按预期返回,因为其他库可能已更改为undefined。 一些答案(@skalee的答案)似乎更喜欢不使用typeof ,这可能会给您带来麻烦。

“旧”的方式来处理这个问题被宣布不定位为VAR,以抵消任何潜在的静音/的压倒一切的undefined 。 但是,最好的方法仍然是使用typeof因为它将忽略其他代码中所有undefined覆盖。 尤其是如果您正在编写要在野外使用的代码,那么谁又知道该页面上可能还会运行什么……

#5楼

您可以使用typeof运算符。

例如,

var dataSet;

alert("Variable dataSet is : " + typeof dataSet);

上面的代码片段将返回类似的输出

变量dataSet是:未定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值