如何将javascript var设置为undefined

AnA*_*ice 34 javascript

鉴于:

console.log(boo); this outputs undefined
Run Code Online (Sandbox Code Playgroud)

鉴于:

var boo = 1;
console.log(boo); this outputs 1
Run Code Online (Sandbox Code Playgroud)

在定义boo并设置为1后,如何重置boo,以便console.log输出undefined?

谢谢

Goo*_*rry 46

为了可靠地设置一个变量booundefined,使用函数用空return表达:

boo = (function () { return; })();
Run Code Online (Sandbox Code Playgroud)

执行这行代码后,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'
Run Code Online (Sandbox Code Playgroud)

编辑但也请参阅@Colin的简单解决方案!

参考

这种行为是ECMAScript 1的标准.相关规范部分说明:

句法

return[ 此处没有LineTerminator ] 表达 ;

语义

一个return语句导致函数停止执行,并返回一个值给调用者.如果省略Expression,则返回值为undefined.

要查看原始规格,请参阅:

附录

为了完整起见,我根据其他响应者给出的答案和评论,附上了对此问题的替代方法的简要总结,以及对这些方法的反对意见.

1.分配undefinedboo

boo = undefined; // not recommended
Run Code Online (Sandbox Code Playgroud)

虽然这是更简单的分配undefinedboo直接,undefined不是保留字和可以被取代由一个任意值,诸如数字或字符串.

2.删除 boo

delete boo; // not recommended
Run Code Online (Sandbox Code Playgroud)

删除boo删除的定义boo完全,而不是分配给它的价值undefined,而且当时只适用,如果boo是一个全球性的属性.

  • 关于附录第1项:来自[MDN docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined):"在现代浏览器中(JavaScript 1.8.5/Firefox 4+),`undefined`是ECMAScript 5规范中不可配置的不可写属性." 所以`boo = undefined;`在"现代浏览器"中是安全的,因为`undefined`不能被覆盖. (8认同)
  • @AndreschSerj也适合我.return语句是多余的.我的IDE也抱怨它:) (3认同)
  • return语句不是多余的吗?这对我有用:`_foo =(function(){})();` (2认同)

小智 30

使用void运营商.它将评估它的表达式然后返回undefined.void 0用于分配变量是惯用的undefined

var boo = 1; // boo is 1
boo = void 0; // boo is now undefined
Run Code Online (Sandbox Code Playgroud)

在此处了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void


Bry*_*yle 14

您可以简单地为变量赋值undefined:

boo = undefined;
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用delete运算符删除变量:

delete boo;
Run Code Online (Sandbox Code Playgroud)


nee*_*ebz 10

delete boo

不要用var boo = undefined.undefined只是一个变量,如果有人设置,undefined = "hello"那么你到处都会得到你好:)

编辑:

null与undefined不同.删除那一点.

  • 你不能'删除boo`,它是一个变量.它仅在变量处于全局范围内时才有效,即使它在IE中不起作用并在严格模式下抛出错误. (7认同)
  • Esailija是对的.来自[MDN docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete):"`delete`仅对对象的属性有效.它没有效果在变量或函数名称上." (3认同)