Can I set variables to undefined or pass undefined as an argument?
我对javascript的
一旦定义了一个变量,我是否可以将其清除回
我可以把
1 2 3 4 5 | function test(var1, var2, var3) { } test("value1", undefined,"value2"); |
I'm a bit confused about Javascript undefined & null.
不要对
另一方面,
当调用参数少于
1 2 3 4 5 | function dosomething(arg1, arg2) { if (arg2===undefined) arg2= DEFAULT_VALUE_FOR_ARG2; ... } |
使用此方法,您无法区分
当函数没有
当您通过在块中使用
当操作数是不存在的简单变量时,诡异的
这是有争议的。当您访问一个不存在的对象的属性时,您不会像其他语言那样立即得到错误。相反,你得到一个
这通常用于检查属性的存在:
1 2 | if (o.prop!==undefined) // or often as truthiness test, if (o.prop) ...do something... |
但是,因为您可以像其他值一样分配
1 | o.prop= undefined; |
但这并不能真正检测到房地产是否可靠。最好使用
1 2 | if ('prop' in o) ... |
总之,
what does
if (!testvar) actually do? Does it test for undefined and null or just undefined?
这样的"真实性"测试检查了
once a variable is defined can I clear it back to undefined (therefore deleting the variable).
您当然可以将
can I pass undefined as a parameter?
对。
你不能(不应该?)将任何内容定义为未定义,因为变量不再是未定义的–您只是将其定义为某个内容。
你不能(不应该?)将
声明
要正确测试
1 2 3 | if(typeof(testvar) ==="undefined") { ... } if(testvar === null) { ... } |
基本区别在于
如果只有
1 2 3 4 5 | var a; a == null; // This is true a == undefined; // This is true; a === undefined; // This is true; |
但是,如果您有意将值设置为
1 2 3 4 | var b = null; b == null; // This is true b == undefined; // This is true; b === undefined; // This is false; |
查看这里的引用,而不是轻蔑地说"总之,未定义是一个特定于javascript的混乱,这会混淆所有人"之类的垃圾。只是因为你很困惑,这并不意味着这是一个混乱。
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/undefined
这种行为也不特定于javascript,它完成了布尔结果可以是
http://en.wikipedia.org/wiki/undefinedu值
检查空值的最佳方法是
1 2 3 4 | if ( testVar !== null ) { // do action here } |
对于未定义的
1 2 3 4 | if ( testVar !== undefined ) { // do action here } |
可以指定一个未定义的可用项。
1 2 | testVar = undefined; //typeof(testVar) will be equal to undefined. |
是的,可以,因为未定义被定义为未定义。
1 2 3 4 5 | console.log( /*global.*/undefined === window['undefined'] && /*global.*/undefined === (function(){})() && window['undefined'] === (function(){})() ) //true |
你的情况:
1 | test("value1", undefined,"value2") |
还可以创建自己的未定义变量:
1 2 | Object.defineProperty(this, 'u', {value : undefined}); console.log(u); //undefined |
要回答第一个问题,not运算符(
试试这个:
1 2 | // found on UglifyJS variable = void 0; |
javascript,如何在命令行上将变量设置为未定义:
在Ubuntu 12.10的EDCOX1、0、JavaScript命令行终端中设置变量为未定义的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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中将变量设置为未定义:
把它放在myjs.html中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <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); </body> </html> |
它打印:
1 2 3 4 5 6 7 | 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 |
警告!将变量设置为未定义时,将变量设置为另一个变量。如果某个卑鄙的人运行
您可能想知道我如何在开始时输出未定义的值aliens并使其仍然运行。这是因为javascript提升:http://www.adequatelygood.com/javascript-scoping-and-lifting.html
为了好玩,这里有一个相当安全的方法来为变量分配"未分配"。要使其发生冲突,需要有人将与随机生成的字符串同名的对象添加到原型中。我确信可以改进随机字符串生成器,但我只是从这个问题中选择了一个:在javascript中生成随机字符串/字符
它的工作原理是创建一个新对象,并尝试使用随机生成的名称访问其上的属性,我们假设该名称不存在,因此其值为Undefined。
1 2 3 4 5 6 7 8 9 10 11 | 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()]; |
for
1 | if (document.getElementById) |
标识符被转换为布尔值,因此
javascript有一个
没有可以用作未定义文本的