资讯专栏INFORMATION COLUMN

JavaScript 中 undefined 的使用

cnio / 2627人阅读

摘要:种基本类型操作符指示操作数的类型使用通常情况下,使用是指对象下的属性。即在浏览器端使用时,其实使用的是,而恰巧的初始值为。如何证实使用时,是使用而不是具体值。所以在全局环境下,如果对象没有被覆盖,可以放心使用,因为它是不可修改的。

定义

Undefined 是 JavaScript 中的一种基本数据类型,该类型有一个唯一值 undefined

6种基本类型: Undefined Null Number String Boolean Symbol

// typeof 操作符指示操作数的类型
typeof undefined; // "undefined"
typeof 2; // "number"
使用

通常情况下,使用 undefined 是指 window 对象下的 undefined 属性。
即在浏览器端使用 undefined 时,其实使用的是 window.undefined,而恰巧 window.undefined 的初始值为 undefined

如何证实使用 undefined 时,是使用 window.undefined , 而不是具体值 undefined

请看下面的例子:

null = 10; // 报错,因为不能给具体的值进行赋值操作
undefined = 11; // 不报错,因为 undefined 指的是 window 对象下的 undefined 属性
"undefined" in window; // true

如果还有怀疑,可以再举一个栗子:

"use strict";
undefined = 11; 
// Script snippet #1:2 Uncaught TypeError: Cannot assign to read only property "undefined" of object "#"
// 严格模式下,给对象的只读属性赋值会报错

window.undefined 在 ES3 中可修改为任意值,但在 ES5 中是不可写、不可配置的属性,其值永远是 undefined

所以在全局环境下,如果 window 对象没有被覆盖,可以放心使用 undefinedwindow.undefined),因为它是不可修改的。

window.undefined 是不可修改的,但 window 对象是可修改的

let a;
a === undefined;         // true
a === window.undefined;  // true

// window.undefined 属性不可修改
window.undefined = 11;
window.undefined; // undefined

但是,在函数内部使用 undefined 可能并不可靠,虽然 undefined 是一种数据类型,但它并不是关键字,所以它可以作为标识符,例如:

(function () {
    let a;
     let undefined = "123";
     console.log(a === undefined); // false
     console.log(a); // undefined
     console.log(undefined); // 123
     console.log(window.undefined) // undefined
})()

正如之前所说,使用 window.undefined 也并不一定可靠,再看下面的例子:

function fun() {
   let undefined = "hello world",
       f = {},
       window = {
           "undefined": "abc"
       };
   console.log(undefined);// hello world
   console.log(window.undefined); //abc
   console.log(f.a === undefined); //false
   console.log(f.a === void 0); //true
}
fun();

可以看出,如果某段代码复写了 window 对象,在使用 undefined 时会出现一些问题,但总会有解决办法的。

例如 jQuery 源码里是这样是使用的:

// 自执行函数里定义了两个参数,但在调用时只传了一个参数,所以第二个参数 undefined 的值为 undefined
(function( window, undefined ) { 
    // 构造 jQuery 对象 
    var jQuery = (function() { 
        var jQuery = function( selector, context ) {
            return new jQuery.fn.init( selector, context, rootjQuery );
        };
         // 省略其他模块的代码
     }); 
     window.jQuery = window.$ = jQuery; 
 })( window );

underscore 源码里是这样是使用的:

// 无论 void 操作符后面的表达式是什么,其返回值都为 undefined
_.isUndefined = function(obj) {
    return obj === void 0;
};
赋值

给变量赋值为 undefined ,可以用以下几种方式:

变量被声明了,但没有赋值时,该变量就等于 undefined

调用函数时,应该提供的参数没有提供,该参数等于 undefined

对象没有赋值的属性,该属性的值为 undefined

函数没有返回值时,默认返回 undefined

执行 void(0),返回值为 undefined

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85061.html

相关文章

  • 细说 Javascript 拾遗篇(二) : undefined 和 null

    摘要:有两个可以表示空的值,分别是和,比较有作用的是前者。访问声明但未初始化的变量。有返回值时函数的表达式没有显式的返回任何内容。然而,为了比较其他变量和值,我们需要提前取得的值。因此,从标准实行后,全局变量已经是不再可写。 Javascript 有两个可以表示空的值,分别是 undefined 和 null,比较有作用的是前者。 undefined undefined 是一种值为 un...

    My_Oh_My 评论0 收藏0
  • 【译】javascriptundefined可以被重写

    摘要:然而,这一行为在年的被修复了。在现代浏览器中,的值将不能被重写我们需要支持或者更古老的浏览器怎么办通常指令是安全的。都会计算得到另外一种选择,你可以使用操作符安全地检查是否已经被赋值。虽然没有被声明,仍然会说他是。 众所周知,当声明一个变量,并且没有给赋值的情况下,它的初始值是 undefined。但是在javascript中,怎么检查一个值是否为 undefined 呢? 简单的回答...

    codeKK 评论0 收藏0
  • [译]Understanding javascript's 'undefined

    摘要:一个表示编译器检测到一个无效的引用值。在实际情况中,往往是在获取一个未被赋值的引用时被抛出。任何一个函数上下文都有一个被称为活动对象的变量对象。没有找到的话,就会认为引用名没有基础值并抛出的错误。下没有下的属性仅存在于被启动的情况下。 和其他语言相比,javascript中的对于undefined的理解还是有点让人困惑的。特别是试着理解ReferenceErrors错误(x is no...

    galaxy_robot 评论0 收藏0
  • 你不知道JavaScript卷 第一、二章

    摘要:表达式没有返回值,因此返回结果是。并不改变表达式的结果,只要让表达式不返回值按惯例我们用来获得这主要源自语言,当然使用或其他表达式也是可以的。不是数字的数字如果数学运算的操作数不是数字类型,就无法返回一个有效的数字,这种情况下返回值为。 这里的内容是读书笔记,仅供自己学习所用,有欠缺的地方欢迎留言提示。 第一部分 类型和语法 第1章 类型ECMAScript语言类型包括Undefin...

    levy9527 评论0 收藏0
  • JavaScript-数据类型

    摘要:解释一行,执行一行这也意味着你可以使用同一个变量保存不同类型的数据二数据类型最新的标准定义了种数据类型种原型数据类型布尔值,和一个表明值的特殊关键字。我们称这些类型的值为原始值四布尔值布尔值数据类型只能有两个值,它们是文本和。 一、动态类型 JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。(解释一行,执行一行)这也...

    沈俭 评论0 收藏0

发表评论

0条评论

cnio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<