JavaScript的常见方法2015

 

push()和pop()方法 :

ECMAScript数组也提供了一种让数组的行为类似与其它数据结构的方法。具体说来,数组可以表现的就像栈一样,后者是一种可以限制插入和删除项的数据结构。

栈是一种LIFO(last-in-first-out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(推入)或移除(弹出)只发生在一个位置——栈的顶部。

ECMAScript为数组专门提供了push()和pop()方法,以便实现类似栈的行为。

push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后的数组长度。

而pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。请看下面的例子:

var colors = new Array();                 //创建一个数组
var count = colors.push("red", "green");  //推入两项
alert(count);                             //2

count = colors.push("black");             //推入另一项
alert(count);                             //3

var item = colors.pop();                  //取得最后一项
alert(item);                              //black
alert(colors.length);                     //2

 join()方法:

数组继承的toLocalString()、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”。
如果数组中的某一项的值是null或者undefined,那么该值在join()、toLocaleString()、toString()和valueOf方法返回的结果中以空字符串表示。

toLocaleString()、toString()、valueOf():

所有的对象都具有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()方法相同的结果。

另外,toLocalString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。当调用数组的toLocaleString()方法时,它也会创建一个数组的以逗号分割的字符串。

而与前两个方法唯一的不同指出在于,这因此i是为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是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

检测类型:

要检测一个变量是不是基本数据类型,typeof操作符是最佳的工具。typeof操作符是确定一个变量是字符串、数值、布尔值,还是undefined的最佳工具。

如果变量的值是一个对象或null,则typeof操作符会像下面例子中所示的那样返回“object”:

var s = "Nicholas";
var b = true;
var i = 2;
var u;
var n = null;
var o = new Object();

alert(typeof s);  //string
alert(typeof i);  //number
alert(typeof b);  //boolean
alert(typeof u);  //undefined
alert(typeof n);  //object
alert(typeof o);  //object

虽然在检测基本数据类型时typeof是非常得力的助手,但在检测引用类型的值时,这个操作符的用处不大。通常,我们并不想知道某个值是对象,而是想知道它是什么类型的对象。

为此,ECMAScript提供了instanceof操作符,其语法如下:

result = variable instanceof constructor

如果变量是给定引用类型的示例,那么instanceof操作符就会返回true。请看下面的例子:

alert(person instanceof Object);   //变量person是Object吗?
alert(colors instanceof Array);    //变量colors是Array吗?
alert(pattern instanceof RegExp);  //变量pattern是RegExp吗?

根据规定,所有引用类型的值都是Object的实例。因此在检测一个引用类型值和Object构造函数时,instanceof操作符始终会返回true。当然,如果使用instanceof操作符检测基本类型的值,则该操作符始终会返回false,因为基本类型不是对象。

使用typeof操作符检测函数时,该操作符会返回“function”。在Safari和Chrome中使用typeof检测正则表达式时,这个操作符会错误地也返回“function”。

 
 
posted @ 2015-11-18 13:58  SunsCheung  阅读(152)  评论(0编辑  收藏  举报