【发布时间】:2014-07-17 18:32:18
【问题描述】:
如果没有为 Javascript 中声明的变量分配初始值,会发生什么情况?
假设我将变量声明如下
var cancel;
现在,这个变量“cancel”有值还是 null 还是什么?
谢谢。
【问题讨论】:
标签: javascript
如果没有为 Javascript 中声明的变量分配初始值,会发生什么情况?
假设我将变量声明如下
var cancel;
现在,这个变量“cancel”有值还是 null 还是什么?
谢谢。
【问题讨论】:
标签: javascript
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`)
}
【讨论】:
如果您只是执行以下操作,您将看到带有 undefined 值的警报框。只需在 Firebug 或 chrome 开发者工具中尝试一下
var cancel;
alert(cancel)
【讨论】:
未声明的变量或没有值的变量具有“未定义”类型。
请务必注意,与其他一些语言(例如 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/
【讨论】:
== 运算符的使用不正确,它将undefined、null 和空字符串全部强制为假,从而使您对undefined 的检查无效。另请参阅stackoverflow.com/q/10560362/1594449。