JavaScript 中全局范围内存在未定义变量的原因是什么?
What is the reason for the existence of undefined variable in the global scope in JavaScript?
我发现很多关于未定义为值的讨论,例如如何检查是否相等等。但是,未定义为全局变量存在的"工程"原因是什么?相反没有空变量...
console.log(undefined in this); // logs true
console.log(null in this); // logs false
在 JavaScript 中,null
是一个保留字; undefined
不是,而是由环境作为值为 undefined
的全局变量实现的
您会注意到您可以更改 undefined
的值,但不能更改 null
的值,除非在严格模式下(这将引发错误)或 ES5(将忽略分配)。
现在,为什么undefined
没有保留,我不知道。
简单的答案是 ECMAScript 定义了全局对象的一个属性,称为 undefined,其初始值是未定义的。此对象是在进入任何执行上下文之前创建的,因此它始终在运行任何代码之前存在。
这可能是测试未定义值的便利,否则通常会执行以下操作:
var undefined;
// test against undefined.
function foo() {
// And maybe here too
var undefined;
// test against undefined.
}
由于全局未定义属性没有写保护,因此通常会执行以下操作:
(function(global, undefined) {
// In here you can be sure undefined has the value undefined
}(this));
编辑
总之,目标似乎是创建两种不同的方法来返回"没有值"的值,其中undefined表示"我的值根本没有定义",而null表示"我没有值"。
例如
function getElement(id) {
if (document && document.getElementById) {
return document.getElementById(id);
}
// return undefined implied
}
如果上面的函数返回 null
,你知道它运行成功,但没有找到具有提供 id 的元素,而如果它返回 undefined
,你知道它甚至没有尝试。
关于:
相反没有空变量
我猜你是说"为什么undefined
是一个全局变量,而null
是全局对象。
答案是一样的:因为规范就是这样写的。一种解释(不是原因)是 JavaScript 过早优化,有一些基本问题应该早点解决,但现在改变它们为时已晚(并且已经很多年了)。
如果像null
一样实现undefined
(即作为全局对象的只读属性),并且
typeof undefined === 'undefined'
和
typeof null === 'null'
因为这就是它们的实际本质。但是现在改变它可能会产生比它解决的问题更多的问题。
然后是NaN
...
- 未设置变量的赋值| jQuery的作用是什么
- 在Javascript中,变量前面的+运算符是什么
- 当我想发布一个变量但有 1 个 js 时,ajax post 的解决方案是什么
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- 在 HTML 中显示变量的好做法是什么?
- javascript中if(变量)的确切否定是什么
- jQuery变量$$符号是什么意思
- 将密码存储在Javascript变量中的安全含义是什么
- 将全局配置变量传递到手把模板的最佳方式是什么
- 检查全局变量是否存在的正确方法是什么
- 该示例用于将变量传递给javascript中的对象的技术的名称是什么
- 在javascript上使用这个而不是上下文变量有什么缺点吗
- 为什么 arr[0](var = first)没有明确地与 arr[i](计数器变量)进行比较?这里比较的是什么
- 这行代码的变量是什么以及如何找到值
- JavaScript 中全局范围内存在未定义变量的原因是什么?
- JavaScript中变量是什么意思
- 在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
- 具有多个逗号分隔值的变量声明是什么意思(例如 var a = b,c,d;)
- 变量的含义是什么 变量名称 = 变量名称 ||{};.
- 我的代码中的错误是什么?变量的乘法没有显示在总数中