Javascript 想知道更多关于未定义的信息吗
如您所见,undefined在javascript中不是一个关键字(对吗?),所以我们可以将其用作变量,尽管我确信这不是一个好主意。现在我的问题是为什么我不能给undefined赋值 代码: 如果有任何建议,我们将不胜感激。请参阅关于“undefined”在JavaScript中的用法的完整解释(我不是作者) 与其他语言相比,JavaScript的未定义概念是 有点困惑。特别是,试图理解引用错误 (“x未定义”)以及如何最好地针对它们进行编码 令人沮丧 在JavaScript中有未定义(类型)、未定义(值)和 未定义(变量) Undefined(type)是内置的JavaScript类型 undefined(value)是一个原语,是 未定义类型。未指定值的任何属性, 假定为未定义的值。(ECMA 4.3.9和4.3.10)。函数 没有return语句,或者函数返回为空 语句返回未定义的。未应用函数的值 参数未定义 未定义(变量)是一个全局属性,其初始值为 未定义(值),因为它是全局属性,所以我们也可以访问它 作为一个变量 从ECMA 3开始,其值可以重新分配: 不用说,将值重新分配给未定义的变量是非常困难的 错误的做法,事实上ECMA 5不允许这种做法(尽管 当前一组完整的浏览器版本,只有Safari强制执行此功能) 这里可以看到关于“undefined”如何在JavaScript中使用的完整解释(我不是作者) 与其他语言相比,JavaScript的未定义概念是 有点困惑。特别是,试图理解引用错误 (“x未定义”)以及如何最好地针对它们进行编码 令人沮丧 在JavaScript中有未定义(类型)、未定义(值)和 未定义(变量) Undefined(type)是内置的JavaScript类型 undefined(value)是一个原语,是 未定义类型。未指定值的任何属性, 假定为未定义的值。(ECMA 4.3.9和4.3.10)。函数 没有return语句,或者函数返回为空 语句返回未定义的。未应用函数的值 参数未定义 未定义(变量)是一个全局属性,其初始值为 未定义(值),因为它是全局属性,所以我们也可以访问它 作为一个变量 从ECMA 3开始,其值可以重新分配: 不用说,将值重新分配给未定义的变量是非常困难的 错误的做法,事实上ECMA 5不允许这种做法(尽管 当前一组完整的浏览器版本,只有Safari强制执行此功能)Javascript 想知道更多关于未定义的信息吗,javascript,undefined,Javascript,Undefined,如您所见,undefined在javascript中不是一个关键字(对吗?),所以我们可以将其用作变量,尽管我确信这不是一个好主意。现在我的问题是为什么我不能给undefined赋值 代码: 如果有任何建议,我们将不胜感激。请参阅关于“undefined”在JavaScript中的用法的完整解释(我不是作者) 与其他语言相比,JavaScript的未定义概念是 有点困惑。特别是,试图理解引用错误 (“x未定义”)以及如何最好地针对它们进行编码 令人沮丧 在JavaScript中有未定义(类型)、
因为在较旧的环境中(JS1.8.5之前),可以更改undefined的值,并且检查不存在的内容的方式可能会中断。在自己的闭包中开发库是一种常见的选择,使用IIFE模式创建一个未定义的变量,该变量不会从外部代码(例如jQuery和大多数库)中被触及,以下是一个示例:
(function(undefined) {
//code which safely uses undefined
})();
请注意,有一个名为undefined
的参数,IIFE在调用时没有任何参数,使得undefined
实际上变成undefined
。在较新的环境中,不可能更改undefined的值,但对于可追溯性,它仍被大量使用
然而,检查未定义类型最安全的方法是使用typeof
。事实上,它的用法不能以任何方式被覆盖,而且可以安全地使用:typeof foo==“undefined”
请记住,未定义的和未声明的之间有细微的区别:
var x; //declared but undefined
x === undefined; //true
但在较旧的环境中,您可以这样做
var undefined = 1;
var x; //declared, of type undefined, but...
x === undefined // false, because undefined is 1 and x is of type undefined
如前所述,检查未定义变量(确保它在较旧的环境中工作)最安全的方法是使用typeof:
var undefined = 1;
var x;
typeof x == 'undefined'; //true
还请记住,对
未定义的使用相等检查(=
)也会检查null
(事实上,未定义==null
,但未定义!==null
),因此我建议使用严格相等运算符(=
),它只检查未定义的,因为在较旧的环境中(在JS 1.8.5之前),可以更改未定义的值,而检查不存在的内容的方式可能会中断。在自己的闭包中开发库是一种常见的选择,使用IIFE模式创建一个未定义的变量,该变量不会从外部代码(例如jQuery和大多数库)中被触及,以下是一个示例:
(function(undefined) {
//code which safely uses undefined
})();
请注意,有一个名为undefined
的参数,IIFE在调用时没有任何参数,使得undefined
实际上变成undefined
。在较新的环境中,不可能更改undefined的值,但对于可追溯性,它仍被大量使用
然而,检查未定义类型最安全的方法是使用typeof
。事实上,它的用法不能以任何方式被覆盖,而且可以安全地使用:typeof foo==“undefined”
请记住,未定义的和未声明的之间有细微的区别:
var x; //declared but undefined
x === undefined; //true
但在较旧的环境中,您可以这样做
var undefined = 1;
var x; //declared, of type undefined, but...
x === undefined // false, because undefined is 1 and x is of type undefined
如前所述,检查未定义变量(确保它在较旧的环境中工作)最安全的方法是使用typeof:
var undefined = 1;
var x;
typeof x == 'undefined'; //true
还请记住,对未定义的使用相等检查(=
)也会检查null
(事实上,未定义==null
,但未定义!==null
),因此我建议使用严格相等的检查