JavaScript中的枚举

在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留)。然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式——JSON来实现它。
  如下,我们来定义Week的枚举:
        if(typeof WeekDay == "undefined"){
            var WeekDay = {};
            WeekDay.Sunday = 0;
            WeekDay.Monday = 1;
            WeekDay.Tuesday = 2;
            WeekDay.Wedesay = 3;
            WeekDay.Thursday = 4;
            WeekDay.Friday = 5;
            WeekDay.Saturday = 6;
        }

  测试如下:
            alert(WeekDay.Monday);  // -----> Output: 1

 
  当然,我们有更为直观的方式。以定义DOM文档节点类型为例,定义方式如下:
        if(typeof Node == "undefined"){
            var Node = {
                ELEMENT_NODE: 1,
                ATTRIBUTE_NODE: 2,
                TEXT_NODE: 3,
                CDATA_SECTION_NODE: 4,
                ENTITY_REFERENCE_NODE: 5,
                ENTITY_NODE: 6,
                PROCESSING_INSTRUCTION_NODE: 7,
                COMMENT_NODE: 8,
                DOCUMENT_NODE: 9,
                DOCUMENT_TYPE_NODE: 10,
                DOCUMENT_FRAGEMENT_NODE: 11,
                NOTATION_NODE: 12
            }
        }

测试如下:

       alert(document.nodeType == Node.DOCUMENT_NODE);  // -----> Output: true


    说明,以上Node定义可作为纠正IE不支持DOM节点类型常量用(其他主流浏览器均支持)。


  与类C语言类似,以上2个例子的枚举对应属性值均为整形。你可能想到,难道还能定义成别的类型?

要回答这个问题,得先知道咱们这个枚举实现的原理。前面说到,这里是用JSON来实现的,而JSON可以使用任何类型的值!

所以,Js中的枚举可以是任何类型的值。以下以String类型为例:


        if(typeof Color == "undefined"){
            var Color = {
                Color1: ‘red‘,
                Color2: ‘green‘,
                Color3: ‘white‘,
                Color4: ‘black‘
            }
        }

  测试如下:

        alert(Color.Color1);  // -----> Output: red

  以更为复杂的类型来定义一个PersonList枚举如下:


        if(typeof PersonList == "undefined"){
            var PersonList = {
                ZhangSan: {
                    Id: 1,
                    Name: ‘ZhangSan‘,
                    Gender: ‘man‘
                },
                LiSi: {
                    Id: 2,
                    Name: ‘LiSi‘,
                    Gender: ‘woman‘
                },
                ZhaoWu: {
                    Id: 3,
                    Name: ‘ZhaoWu‘,
                    Gender: ‘man‘
                }
            }
        }

 
时间: 2024-08-10 21:30:20

JavaScript中的枚举的相关文章

javascript中的操作符详解1

好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解或曲解他们的用途,本章将会带领初学者们一起来学习一下javascript的几个常用操作符:typeof.in.delete.new. 二.学习目标 1. 深入了解javascript操作符:typeof.in.delete.new的功能及用法. 2. 剖析根本,掌握这些常用的操作符的运用场景,活学活

深入理解JavaScript中创建对象模式的演变(原型)

创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Object构造函数和对象字面量方法 工厂模式 自定义构造函数模式 原型模式 组合使用自定义构造函数模式和原型模式 动态原型模式.寄生构造函数模式.稳妥构造函数模式 第一部分:Object构造函数和对象字面量方法 我之前在博文<javascript中对象字面量的理解>中讲到过这两种方法,如何大家不熟悉,可以点进去看一看回顾一下.它们的优点是用来创建单个的对象非常方

深入理解JavaScript中的属性和特性

深入理解JavaScript中的属性和特性? JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaScript中理解对象的本质.理解对象与类的关系.对象与引用类型的关系 对象属性如何进行分类 属性中特性的理解 第一部分:理解JavaScript中理解对象的本质.理解对象与类的关系.对象与引用类型的关系 对象的本质:ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.即

【转】Javascript 中 null、NaN和undefined的区别

原址:http://www.cnblogs.com/qiantuwuliang/archive/2010/01/12/1645302.html 1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 代码 var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 

深入了解 JavaScript 中的 for 循环

学习前端的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入前端学习交流群,群号码:328058344   在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循环,是: for-of 下面我们就来看看这 4 种 for 循环. 简单 for 循环 下面先来看看大家最常见的一种写法: const arr = [1, 2, 3];

JavaScript 中 for 循环

在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循环,是: for-of 下面我们就来看看这 4 种 for 循环. 简单 for 循环 下面先来看看大家最常见的一种写法: 1 2 3 4 const arr = [1, 2, 3]; for(let i = 0; i < arr.length; i++) {     console.log(arr

JavaScript中Object.prototype.toString方法的原理

在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.log(Object.prototype.toString.call(arr)) //"[object Array]" 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在ES3中,Object.prototype.toString方法的规范如下:

理解javascript中的原型模式

一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点:  1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂模式尽管解决了创建多个相似对象的问题,却没有解决对象识别的问题(返回的是自定义的一个对象o,不明确对象o的类型).  2. 构造函数模式:构造函数的调用和其他oo语言一样,用new操作符来构建一个Person的实例:javascript中的构造函数也是函数(所以也可以直接像普通函数那样直接调用方法名

JavaScript中的继承与原型链

先看一个例子 function User(){} var u1 = new User(); console.log(u1.prototype);// undefined 使用对象实例无法访问到prototype console.log(User.prototype);//{},使用构造函数名访问prototype console.log(u1.__proto__);//{},使用对象实例访问prototype的指针 这个是 __proto__ 和prototype最基本的区别:说明构造的对象无p