我可以将variables设置为undefined或将undefined作为parameter passing吗?

我对JavaScript的undefinednull值有点困惑。

if (!testvar)实际上做了什么? 它testingundefinednull或只是undefined

一旦定义了variables,我可以将其清除回undefined (因此删除variables)?

我可以通过undefined作为参数吗? 例如:

 function test(var1, var2, var3) { } test("value1", undefined, "value2"); 

我对Javascript undefined&null有点困惑。

不要混淆null 。 它通常是有意义的,并且行为类似于其他脚本语言的带外“空”,“零”或“无”对象的概念。

undefined ,另一方面,是一个奇怪的JavaScript怪癖。 这是一个表示带外值的单例对象,本质上是第二个类似但不同的null 。 它出现了:

  1. 当调用function语句列表中参数列表less的function ,未被传递的参数被设置为undefined 。 你可以用例如:

     function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... } 

    用这种方法你不能区分dosomething(1)dosomething(1, undefined)之间的区别; arg2在两者中都是相同的值。 如果你需要说明不同,你可以看看arguments.length ,但是做这样的可选参数通常不是非常可读的。

  2. 当函数没有return value; ,它返回undefined 。 通常不需要使用这样的返回结果。

  3. 当你通过在一个块中声明一个var a语句来声明一个variables,但还没有为它赋值时,它是undefined 。 再次,你不应该依靠这个。

  4. 当它的操作数是一个不存在的简单variables时,这个令人毛骨悚然的typeof运算符返回'undefined' ,而不是像通常发生的那样抛出一个错误,如果你试图引用它。 (你也可以给它一个简单的包含在括号中的variables,但不能包含一个不存在variables的完整expression式)。

  5. 这是有争议的。 当你访问一个不存在的对象的属性时,你不会立即得到像其他语言一样的错误。 相反,你会得到一个undefined对象。 (然后,当你试图在脚本中使用那个undefined对象时,它会以一种奇怪的方式出错,这比JavaScript刚刚抛出一个错误更难追踪。

    这通常用于检查属性的存在:

     if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something... 

    但是,因为您可以像其他任何值一样指定undefined

     o.prop= undefined; 

    这实际上并没有检测到房产是否有可靠的存在。 最好使用in运算符,它不在原始的Netscape版本的JavaScript中,而是现在到处可用:

     if ('prop' in o) ... 

总之, undefined是一个JavaScript特定的混乱,混淆每个人。 除了可选的函数参数,JS没有其他更优雅的机制,应该避免undefined 。 它不应该是语言的一部分; null对于(2)和(3)来说工作得很好,而(4)是只存在的错误特征,因为在开始时JavaScript没有例外。

if (!testvar)实际上做了什么? 它testing未定义和null或只是未定义?

这样的“真实性”testing针对falseundefinednull0NaN和空string进行检查。 但在这种情况下,是的,它确实是undefined 。 国际海事组织,它应该是更明确的说, if (testvar!==undefined)

一旦定义了一个variables,我可以将其清除回到未定义状态(因此删除该variables)。

你当然可以给它undefined ,但是不会删除这个variables。 只有delete object.property操作符才能真正删除东西。

delete实际上是指属性而不是variables。 浏览器可以让你直接delete variable ,但这不是一个好主意,并且在ECMAScript第五版的严格模式下不起作用。 如果你想释放一个对某些东西的引用,所以它可以被垃圾收集,通常说variable= null

我可以通过undefined作为参数吗?

是。

你不能(不应该)定义任何未定义的东西,因为variables不再是未定义的 – 你只是定义为某个东西。

你不能(不应该)将undefined传递给一个函数。 如果你想传递一个空值,那么使用null

语句if(!testvar)检查布尔型的真/假值,这个特定的testing是否testvar评估为false 。 根据定义, nullundefined应该被评估为truefalse ,但JavaScript会将null评估为false ,并且如果您尝试评估未定义的variables,则会给出错误。

要正确testingundefinednull ,请使用以下命令:

 if(typeof(testvar) === "undefined") { ... } if(testvar === null) { ... } 

基本的区别在于undefinednull表示不同的概念。

如果只有null可用,那么您将无法确定null是否被有意设置为值或者值是否尚未设置,除非您使用繁琐的错误捕获:例如

 var a; a == null; // This is true a == undefined; // This is true; a === undefined; // This is true; 

但是,如果有意将该值设置为null ,则与undefined严格相等会失败,从而允许区分nullundefined值:

 var b = null; b == null; // This is true b == undefined; // This is true; b === undefined; // This is false; 

看看这里的参考,而不是依靠人们轻蔑地说垃圾像“总之,undefined是一个JavaScript特定的混乱,混淆每个人”。 只是因为你感到困惑,并不意味着它是一团糟。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

这种行为也不是特定于JavaScript,它完成了一个布尔结果可以是truefalse ,unknown( null ),no value( undefined )或者出错( error )的概念。

http://en.wikipedia.org/wiki/Undefined_value

检查空值的最佳方法是

 if ( testVar !== null ) { // do action here } 

并为未定义

 if ( testVar !== undefined ) { // do action here } 

你可以指定一个未定义的variables。

 testVar = undefined; //typeof(testVar) will be equal to undefined. 

为了回答你的第一个问题,非运算符( ! )会强制将它赋给一个布尔值。 所以null0falseNaN"" (空string)都将显示为false。

是的,你可以,因为undefined被定义为undefined。

 console.log( /*global.*/undefined === window['undefined'] && /*global.*/undefined === (function(){})() && window['undefined'] === (function(){})() ) //true 

你的情况:

 test("value1", undefined, "value2") 

你也可以创build你自己的未定义的variables:

 Object.defineProperty(this, 'u', {value : undefined}); console.log(u); //undefined 

JavaScript,如何在命令行上设置一个variablesundefined:

在Ubuntu 12.10中的Java附带的js javascript命令行terminal中设置一个未定义的variables。

 el@defiant ~ $ js js> typeof boo "undefined" js> boo typein:2: ReferenceError: boo is not defined js> boo=5 5 js> typeof boo "number" js> delete(boo) true js> typeof boo "undefined" js> boo typein:7: ReferenceError: boo is not defined 

如果你在javascript中设置一个未定义的variables:

把这个放在myjs.html中:

 <html> <body> <script type="text/JavaScript"> document.write("aliens: " + aliens); document.write("typeof aliens: " + (typeof aliens)); var aliens = "scramble the nimitz"; document.write("found some aliens: " + (typeof aliens)); document.write("not sayings its aliens but... " + aliens); aliens = undefined; document.write("aliens deleted"); document.write("typeof aliens: " + (typeof aliens)); document.write("you sure they are gone? " + aliens); </script> </body> </html> 

它打印这个:

 aliens: undefined typeof aliens: undefined found some aliens: string not sayings its aliens but... scramble the nimitz aliens deleted typeof aliens: undefined you sure they are gone? undefined 

警告! 将variables设置为undefined时,将variables设置为另一个variables。 如果某个鬼鬼祟祟的人运行undefined = 'rm -rf /'; 那么无论何时将您的variables设置为undefined,您都将收到该值。

你可能想知道如何在一开始就输出未定义的外星人,并让它继续运行。 这是因为JavaScript的提升: http : //www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

if (something)if (!something)通常用于检查是否定义或未定义。 例如:

 if (document.getElementById) 

标识符被转换为布尔值,所以undefined被解释为false 。 当然还有其他的值(比如0和'')也被解释为false ,但是标识符不应该合理地具有这样的值,或者您对于像undefined一样处理这样的值感到高兴。

JavaScript有一个delete操作符,可以用来删除一个对象的成员。 根据variables的范围(即,如果它是全局的),你可以删除它使其不确定。

没有undefined关键字可以用作未定义的文字。 你可以省略一个函数调用中的参数来使它们不确定,但只能通过向函数发送较less的参数来使用,不能省略中间的参数。

只是为了好玩,这是一个相当安全的方式来分配“未分配”的variables。 对于这种碰撞,需要有人添加到与随机生成的string名称完全相同的Object的原型中。 我相信随机string生成器可以改进,但我只是从这个问题: 在JavaScript中生成随机string/字符

这是通过创build一个新的对象,并尝试访问一个随机生成的名称,我们假设不会存在,并因此将具有未定义的值的属性。

 function GenerateRandomString() { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 50; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } var myVar = {}[GenerateRandomString()]; 

尝试这个:

 // found on UglifyJS variable = void 0;