AJ.*_*AJ. 296 javascript undefined
我对JavaScript undefined和null价值观有点困惑.
什么是if (!testvar)真正做到?它测试undefined和null或只undefined?
一旦定义了变量,我可以将其清除undefined(因此删除变量)吗?
我可以undefined作为参数传递吗?例如:
function test(var1, var2, var3) {
}
test("value1", undefined, "value2");
Run Code Online (Sandbox Code Playgroud)
bob*_*nce 501
我对Javascript undefined&null感到有点困惑.
不要混淆null.它通常是有意义的,并且与其他脚本语言的带外"null","nil"或"None"对象的概念类似.
undefined另一方面,这是一个奇怪的JavaScript怪癖.它是一个表示带外值的单例对象,基本上是第二个相似但不同的值null.它出现了:
当您调用参数少于function语句列表中的参数列表的函数时,未批处理的参数将设置为undefined.您可以使用例如:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
Run Code Online (Sandbox Code Playgroud)
用这种方法你无法区分dosomething(1)和dosomething(1, undefined); arg2两者都是相同的值.如果你需要告诉你可以看到的区别arguments.length,但是做这样的可选参数通常不太可读.
当函数没有时return value;,它返回undefined.通常不需要使用这样的返回结果.
通过var a在块中包含语句来声明变量,但尚未为其赋值时,它是undefined.再说一遍,你真的不需要依赖它.
当它的操作数是一个不存在的简单变量时,怪异的typeof运算符返回'undefined',而不是像你试图引用它时那样抛出错误.(你也可以给它一个包含在括号中的简单变量,但不是一个涉及不存在的变量的完整表达式.)也没用多少.
这是有争议的.当您访问不存在的对象的属性时,您不会立即收到类似于其他所有语言的错误.相反,你得到一个undefined对象.(然后当你尝试undefined在脚本中稍后使用该对象时,它会以一种奇怪的方式出错,这种方式比JavaScript直接抛出错误要困难得多.)
这通常用于检查属性的存在:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
Run Code Online (Sandbox Code Playgroud)
但是,因为您可以undefined像任何其他值一样分配:
o.prop= undefined;
Run Code Online (Sandbox Code Playgroud)
实际上并没有检测到财产是否可靠.最好使用in运算符,这不是最初的Netscape版本的JavaScript,但现在随处可用:
if ('prop' in o)
...
Run Code Online (Sandbox Code Playgroud)总之,这undefined是一个特定于JavaScript的混乱,让每个人都感到困惑.除了可选的函数参数,JS没有其他更优雅的机制,undefined应该避免.它永远不应该成为语言的一部分; null对于(2)和(3)来说,它的效果会很好,而(4)只是存在的错误,因为在开始时JavaScript没有例外.
什么
if (!testvar)实际上做?它是测试undefined和null还是只是未定义?
这样的"感实性"测试检查对抗false,undefined,null,0,NaN和空字符串.但在这种情况下,是的,它确实undefined是关注的.国际海事组织,应该更明确地说并且说if (testvar!==undefined).
一旦定义了变量,我可以将其清除为未定义(因此删除变量).
你当然可以分配undefined它,但不会删除变量.只有delete object.property操作员真正删除了东西.
delete真正意味着属性而不是变量.浏览器会让你直接逃脱delete variable,但这不是一个好主意,并且不适用于ECMAScript第五版的严格模式.如果你想释放对某些东西的引用以便它可以被垃圾收集,那么更常见的说法是variable= null.
我可以将undefined作为参数传递吗?
是.
Tat*_*nen 16
你不能(不应该?)定义任何未定义的东西,因为变量将不再是未定义的 - 你只是将它定义为某种东西.
你不能(不应该?)传递undefined给一个函数.如果要传递空值,请null改用.
该语句if(!testvar)检查布尔值true/false值,这个特定值测试是否testvar求值false.根据定义,null并且undefined不应该被评估既不是true或false,但JavaScript的评价null是false,如果你试图评估一个未定义的变量给出了一个错误.
要正确测试undefined或null使用这些:
if(typeof(testvar) === "undefined") { ... }
if(testvar === null) { ... }
Run Code Online (Sandbox Code Playgroud)
小智 13
基本区别在于undefined并null代表不同的概念.
如果只有null可用,您将无法确定是否null有意设置为值或者是否尚未设置该值,除非您使用了繁琐的错误捕获:例如
var a;
a == null; // This is true
a == undefined; // This is true;
a === undefined; // This is true;
Run Code Online (Sandbox Code Playgroud)
但是,如果您有意将值设置为null,则严格相等会undefined失败,从而允许您区分null和undefined值:
var b = null;
b == null; // This is true
b == undefined; // This is true;
b === undefined; // This is false;
Run Code Online (Sandbox Code Playgroud)
查看此处的引用,而不是依赖于人们轻率地说垃圾"总之,undefined是一个特定于JavaScript的混乱,这让每个人感到困惑".只是因为你感到困惑,这并不意味着它是一团糟.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
这种行为也是不特定的JavaScript和它完成了广义的概念,一个布尔结果可能是true,false未知(null),没有值(undefined),或出事了(error).
http://en.wikipedia.org/wiki/Undefined_value
rah*_*hul 11
检查空值的最佳方法是
if ( testVar !== null )
{
// do action here
}
Run Code Online (Sandbox Code Playgroud)
并且未定义
if ( testVar !== undefined )
{
// do action here
}
Run Code Online (Sandbox Code Playgroud)
你可以指定一个未定义的avariable.
testVar = undefined;
//typeof(testVar) will be equal to undefined.
Run Code Online (Sandbox Code Playgroud)
小智 6
是的,你可以,因为undefined被定义为undefined.
console.log(
/*global.*/undefined === window['undefined'] &&
/*global.*/undefined === (function(){})() &&
window['undefined'] === (function(){})()
) //true
Run Code Online (Sandbox Code Playgroud)
你的情况:
test("value1", undefined, "value2")
Run Code Online (Sandbox Code Playgroud)
您还可以创建自己的未定义变量:
Object.defineProperty(this, 'u', {value : undefined});
console.log(u); //undefined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
240593 次 |
| 最近记录: |