博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ECMAScript 5 —— Array 类型 (二)
阅读量:6427 次
发布时间:2019-06-23

本文共 2593 字,大约阅读时间需要 8 分钟。

本文接聊聊数组检测与转换方法。

 

一. 检测数组

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

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

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

为了解决这个问题,ECMAScript 5 新增了 Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。这个方法的用法如下。

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

 

二. 转换方法

所有对象都具有 toLocaleString()、toString()和 valueOf()方法。其中,调用数组的 toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。而调用 valueOf()返回的还是数组。实际上,为了创建这个字符串会调用数组每一项的 toString()方法。来看下面这个例子。

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组alert(colors.toString());                   // red,blue,green alert(colors.valueOf());                    // red,blue,green alert(colors);                              // red,blue,green

在这里,我们首先显式地调用了 toString()方法,以便返回数组的字符串表示,每个值的字符串表示拼接成了一个字符串,中间以逗号分隔。接着调用 valueOf()方法,而最后一行代码直接将数组传递给了 alert()。由于 alert()要接收字符串参数,所以它会在后台调用 toString()方法,由此会得到与直接调用 toString()方法相同的结果。

另外,toLocaleString()方法经常也会返回与 toString()和 valueOf()方法相同的值,但也不总是如此。当调用数组的 toLocaleString()方法时,它也会创建一个数组值的以逗号分隔的字符串。而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的 toLocale- String()方法,而不是 toString()方法。看下面这个例子。

var person1 = {    toLocaleString: function () {        return "Nikolaos";    },    toString: function () {        return "Nicholas";    }};var person2 = {    toLocaleString: function () {        return "Grigorios";    },    toString: function () {        return "Greg";    }};var people = [person1, person2];alert(people);                          //Nicholas,Greg alert(people.toString());               //Nicholas,Greg alert(people.toLocaleString());         //Nikolaos,Grigorios

我们在这里定义了两个对象:person1 和 person2。而且还分别为每个对象定义了一个 toString()方法和一个 toLocaleString()方法,这两个方法返回不同的值。然后,创建一个包含前面定义的两个对象的数组。在将数组传递给 alert()时,输出结果是"Nicholas,Greg",因为调用了数组每一项的 toString()方法(同样,这与下一行显式调用 toString()方法得到的结果相同)。而当调用数组的 toLocaleString()方法时,输出结果是"Nikolaos,Grigorios",原因是调用了数组每一项的toLocaleString()方法。

数组继承的 toLocaleString()、toString()和 valueOf()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。而如果使用 join()方法,则可以使用不同的分隔符来构建这个字符串。join()方法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。看下面的例子:

var colors = ["red", "green", "blue"];alert(colors.join(","));        //red,green,blue alert(colors.join("||"));       //red||green||blue

在这里,我们使用 join()方法重现了 toString()方法的输出。在传递逗号的情况下,得到了以逗号分隔的数组值。而在最后一行代码中,我们传递了双竖线符号,结果就得到了字符串"red|| green||blue"。如果不给 join()方法传入任何值,或者给它传入 undefined,则使用逗号作为分隔符。

 

 

好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!

 

转载于:https://www.cnblogs.com/johnvwan/p/9547336.html

你可能感兴趣的文章
如何删除xcode中的多余证书
查看>>
linux网桥实现读后感
查看>>
h2启动脚本
查看>>
MySQL group_concat函数详解
查看>>
jquery:点击回到顶部以及定点滚动
查看>>
mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
查看>>
Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)
查看>>
Android系统电量指示灯 Cubietruck
查看>>
PHP预定义常量
查看>>
IOS 如何选择delegate、notification、KVO?
查看>>
ng-app & ng-controller
查看>>
heartbeat+nginxProxy
查看>>
Cocos2d-x手机游戏开发与项目实战详解
查看>>
编程实现Linux流量监控
查看>>
Entity Framwwork Code First
查看>>
XBPageCurl
查看>>
jquery 闭包函数
查看>>
带左右箭头的图片展示js封装
查看>>
Hadoop环境搭建之Hadoop安装
查看>>
jQuery Mobile 手动显示ajax加载器,提示加载中...
查看>>