给定:
console.log(boo); this outputs undefined
给定:
var boo = 1;
console.log(boo); this outputs 1
在定义boo并将其设置为1之后,我该如何重置boo,以便console.log输出undefined?
谢谢
给定:
console.log(boo); this outputs undefined
给定:
var boo = 1;
console.log(boo); this outputs 1
在定义boo并将其设置为1之后,我该如何重置boo,以便console.log输出undefined?
谢谢
为了可靠地将变量boo
设置为undefined
,请使用一个带有空的return
表达式的函数:
boo = (function () { return; })();
执行完这行代码后,typeof(boo)
的值为 'undefined'
,无论 undefined
全局属性是否被设置为其他的值。例如:
undefined = 'hello';
var boo = 1;
console.log(boo); // outputs '1'
boo = (function () { return; })();
console.log(boo); // outputs 'undefined'
console.log(undefined); // outputs 'hello'
编辑 但是也请参考 @Colin 的 简单方法!
自ECMAScript 1以来,该行为就已经是标准了。 相关规范部分地说明:
语法
return
[此处无LineTerminator] Expression ;语义
return
语句会导致函数停止执行并将值返回给调用者。 如果省略Expression,则返回值为undefined
。
要查看原始规范,请参阅:
为了完整起见,我附加了一个简要概述此问题的其他解决方法以及对这些方法的反驳,这是基于其他回答者的答案和评论。
boo
赋值为undefined
boo = undefined; // not recommended
尽管将undefined
直接赋值给boo
更简单,但undefined
不是保留字,并且可以被替换为任意值,例如数字或字符串。详情请看
2. 删除boo
。delete boo; // not recommended
删除boo
会完全删除boo
的定义,而不是将其赋值为undefined
,即使这样做只有在boo
是全局属性时才会生效。仅当如此。
undefined
是一个不可配置的、不可写的属性。”因此,在“现代浏览器”中,boo = undefined;
是安全的,因为undefined
无法被覆盖。 - TachyonVortex_foo = (function () {})();
- Andresch Serj使用 void
运算符。它会对其表达式进行评估,然后返回 undefined
。惯用法是使用 void 0
将变量赋值为 undefined
。
var boo = 1; // boo is 1
boo = void 0; // boo is now undefined
点击此处了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void
你可以简单地将一个变量赋值为undefined:
boo = undefined;
或者,您可以使用delete
运算符来删除变量:
delete boo;
delete boo
不要使用var boo = undefined
。undefined只是一个变量,如果有人设置undefined = "hello"
,那么你将在任何地方得到hello :)
编辑:
null并不等同于undefined。已删除此部分。
boo
,它是一个变量。只有当变量在全局作用域中时才有效,即使如此,在IE浏览器中也无法正常工作,并且在严格模式下会抛出错误。 - Esailijavar boo = 1;
console.log(boo); // prints 1
boo = undefined;
console.log(boo); // now undefined
delete(boo)