资讯专栏INFORMATION COLUMN

《javascript高级程序设计》笔记:检测数组的方法

wums / 1459人阅读

摘要:如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。

如何检测某个变量是否为数组?

《javascript 高级程序设计》原文摘录:

  自从 ECMAScript 3 做出规定以后,就出现了确定某个对象是不是数组的经典问题。对于一个网页,
或者一个全局作用域而言,使用 instanceof 操作符就能得到满意的结果:

    if (value instanceof Array){
    //对数组执行某些操作
    }

  instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实
际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的 Array 构造函数。如果你从
一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自
不同的构造函数。
  为了解决这个问题,ECMAScript 5 新增了 Array.isArray() 方法。这个方法的目的是最终确定某
个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。这个方法的用法如下。

    if (Array.isArray(value)){
    //对数组执行某些操作
    }

  支持 Array.isArray() 方法的浏览器有 IE9+、Firefox 4+、Safari 5+、Opera 10.5+和 Chrome。

那么问题来了,如何在尚未实现这个方法中的浏览器中准确检测数组
由于原生数组的构造函数名与全局作用域无关,因此用toString()方法,保证返回一样的结果

   function isArray(value) {
      return Object.prototype.toString.call(value) === "[object Array]";
   }

这样的方法就可以比较完美的解决判断是否为数组了,同样也可以判断是不是函数

   function isFunction(value) {
      return Object.prototype.toString.call(value) === "[object Function]";
   }

是不是正则表达式

   function isRegExp(value) {
      return Object.prototype.toString.call(value) === "[object RegExp]";
   }

虽然这样貌似是解决了问题,实际上这还是会存在问题:Object.prototpye.toString()本身也可能会被修改

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

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

相关文章

  • JavaScript高级程序设计》读书笔记

    摘要:为了每个对象都能通过来检测,需要以或者的形式来调用,传递要检查的对象作为第一个参数,称为。对象都是动态的,这就意味着每次访问对象,都会运行一次查询。是语言中立的用于访问和操作和文档。 一、第三章 基本概念: 1.理解参数 1.1 可以向函数中传递任意数量的参数,并且可以通过arguments对象来访问这些参数。 1.2 arguments对象只是类似数组,它通过length来确定传进来...

    dayday_up 评论0 收藏0
  • javascript高级程序设计笔记:变量及变量检测

    摘要:变量的特点变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。 变量的特点 js变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说, 每个变量仅仅是一个用于保存值的占位符而已 js变量可以用来保存任何值,未经过初始化的变量,会保存一个特殊的值—undefined,如:var msg; js变量的初始化并不会为它标记类型;初始化的过程就是给变量赋一个值那...

    XiNGRZ 评论0 收藏0
  • JavaScript高级程序设计-摘要笔记-1

    摘要:说明此摘要笔记系列是我最近看高级程序设计第版随手所记。摘要笔记本身没有系统性,没有全面性可言,写在这里供有一定基础的前端开发者参考交流。对每一项运行给定函数,返回该函数会返回的项组成的数组。是的反操作是的反操作第一部分结束。 说明: 此摘要笔记系列是我最近看《JavaScript高级程序设计(第3版)》随手所记。 里面分条列举了一些我认为重要的、需要记下的、对我有帮助的点,是按照我看...

    chavesgu 评论0 收藏0
  • es5学习笔记——拜读JavaScript高级程序设计(持续更新)

    摘要:当以非构造函数形式被调用时,等同于。并且,函数执行完毕后,其活动对象不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。知道闭包被销毁,创建函数的活动对象才会被回收。 本着尽可能多的完善基础知识,打好基础,做一条有梦想的咸鱼。 1.数据类型 基本数据类型:Undefined,Null,Boolean,Number,String,一种复杂数据类型Object 2.typeof操...

    reclay 评论0 收藏0
  • javascript高级程序设计笔记:正则表达式

    摘要:布尔值,表示是否设置了标志。正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回正则表达式的实例方法方法是否匹配基本语法参数为正则表达式为所要匹配的字符串返回值布尔值在模式与该参数匹配的情况下返回否则,返回。 高程书中对正则部分介绍的偏少,特别是元字符部分几乎没有介绍;我找了几篇不错的博客作为收录:正则表达式30分钟入门教程正则表达式-理论基础篇正则表达式-基础实战...

    ingood 评论0 收藏0

发表评论

0条评论

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