js怎么判断一个变量是map类型

JavaScript09

js怎么判断一个变量是map类型,第1张

首先js暂时还没有map类型。所以需要先自己定义一个Map类型。代码如下

function Map () {

   /**

    * 结构

    * @param key

    * @param value

    */

   function Struct(key,value) {

       this.key = key

       this.value = value

   }

   /**

    * 数据存放数组

    */

   this.arr = []

   /**

    * 增加数据

    * @param key {String}

    * @param value {Object}

    */

   this.put = function (key,value) {

       for (var i = 0 i < this.arr.length i++) {

           if (this.arr[i].key === key) {

               this.arr[i].value = value

               return

           }

       }

       this.arr[this.arr.length] = new Struct(key,value)

   }

   /**

    * 通过key获取数据

    * @param key {String}

    * @returns {Object}

    */

   this.get = function (key) {

       for (var i = 0 i < this.arr.length i++) {

           if (this.arr[i].key === key) {

               return this.arr[i].value

           }

       }

       return null

   }

   /**

    * 删除数据

    * @param key{String}

    */

   this.remove = function (key) {

       var v

       for (var i = 0 i < this.arr.length i++) {

           v = this.arr[i]

           if (v.key === key) {

               this.arr.splice(i,1)

               return

           }

       }

   }

   /**

    * 是否存在key

    * @param key {String}

    * @returns {boolean}

    */

   this.containsKey = function (key) {

       var v

       for (var i = 0 i < this.arr.length i++) {

           v = this.arr[i]

           if (v.key === key) {

               return true

           }

       }

       return false

   }

   /**

    * 获取map数据量

    * @returns {Number}

    */

   this.size = function () {

       return this.arr.length

   }

   /**

    * 判断Map是否为空

    * @returns {boolean}

    */

   this.isEmpty = function () {

       return this.arr.length <= 0

   }

   /**

    * 全部清空

    */

   this.removeAll = function () {

       this.arr = []

   }

}

然后放入数据再做判断

var map = new Map()

map.put("str",'aaaaaa')

console.log(map.get('str'))

//判断是否为Map类型。 instanceof

console.log(map instanceof Map)

1.JavaScript 的对象(Object),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。

2.类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。

3.如果对同一个键多次赋值,后面的值将覆盖前面的值。

4.只有对同一个对象的引用,Map 结构才将其视为同一个键。Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题。

5.如果 Map 的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map 将其视为一个键.