【问题标题】:Javascript unassigned var? [duplicate]Javascript未分配的var? [复制]
【发布时间】:2014-07-17 18:32:18
【问题描述】:

如果没有为 Javascript 中声明的变量分配初始值,会发生什么情况?

假设我将变量声明如下

var cancel;

现在,这个变量“cancel”有值还是 null 还是什么?

谢谢。

【问题讨论】:

标签: javascript


【解决方案1】:

undefined全局对象 的属性,即它是全局范围内的变量。 undefined的初始值是原始值undefined

在现代浏览器(JavaScript 1.8.5 / Firefox 4+)中,undefined 根据 ECMAScript 5 规范是一个不可配置、不可写的属性。即使不是这种情况,也要避免覆盖它。

尚未赋值的变量是undefined 类型。如果正在评估的变量没有赋值,则方法或语句也会返回 undefined。如果未返回值,则函数返回 undefined

由于undefined 不是一个保留,它可以用作除全局范围之外的任何范围内的标识符(变量名)。


示例

var x;
if (x === undefined) {
    // these statements execute
}
else {
    // these statements do not execute
}



类型运算符

或者,可以使用typeof

var x;
if (typeof x === 'undefined') {
    // these statements execute
}

使用typeof 的一个原因是,如果尚未定义变量,它不会引发错误。

// x has not been defined before
if (typeof x === 'undefined') { // evaluates to true without errors
    // these statements execute
}

if(x === undefined){ // throws a ReferenceError

}



空运算符

void 运算符是第三种选择。

var x;
if (x === void 0) {
    // these statements execute
}

// y has not been defined before
if (y === void 0) {
    // throws a ReferenceError (in contrast to `typeof`)
}



来源:MDN - Mozilla Developer Network

【讨论】:

    【解决方案2】:

    如果您只是执行以下操作,您将看到带有 undefined 值的警报框。只需在 Firebug 或 chrome 开发者工具中尝试一下

    var cancel;
    alert(cancel)
    

    【讨论】:

      【解决方案3】:

      未声明的变量或没有值的变量具有“未定义”类型。

      请务必注意,与其他一些语言(例如 PHP)不同,'undefined' 是一个可以检查的 Javascript 关键字,例如:

      if(cancel == undefined) { alert('Cancel is undefined!'); };
      

      您可以使用 javascript 检查 Javascript 变量的类型

      typeof
      

      命令,例如:

      var cancel;
      var typeOfCancel = typeof cancel; // In this case, undefined
      
      var cancel = true;
      var typeOfCancel = typeof cancel; // In this case, boolean
      

      这可能会导致在使用 javascript 时进行额外检查,以查看是否已设置变量,如下所示:

      if(cancel == undefined || cancel == null || cancel == '') {
          // React to the empty value here
      }
      

      你可以在这里看到这个工作: http://jsfiddle.net/7bu84/

      【讨论】:

      • 反对票有什么解释吗?
      • 原因是== 运算符的使用不正确,它将undefinednull 和空字符串全部强制为假,从而使您对undefined 的检查无效。另请参阅stackoverflow.com/q/10560362/1594449
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 2011-05-22
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多