JS String类型

一.String类型

1.字符串位置方法:indexOf()

搜索给定的子字符串,然后返回子字符串的位置(没有找到该子字符串,返回-1);可接受第二个参数表示从子字符串中的哪个位置开始搜索。

例子:可以通过循环调用indexOf来找到所有匹配的子字符串。

var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";

        var positions = new Array();        //var positons=[]

        var pos = stringValue.indexOf("e");

       

        while(pos > -1){

            positions.push(pos);

            pos = stringValue.indexOf("e", pos + 1);

        }

           

        alert(positions);    //"3,24,32,35,52"

 

2.字符串操作方法比较

slice() 方法可从已有的数组中返回选定的元素。

语法:arrayObject.slice(start,end)

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

Substr():可在字符串中抽取从 start 下标开始的指定数目的字符。

语法:stringObject.substr(start,length)

注释:substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。

Substring():

substring() 方法用于提取字符串中介于两个指定下标之间的字符,

语法:stringObject.substring(start,stop)。

返回值:一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。

重要事项:与 slice() 和 substr() 方法不同的是,substring() 不接受负的参数。

实例比较:

var stringValue = "hello world";

        alert(stringValue.slice(3));        //"lo world"

        alert(stringValue.substring(3));    //"lo world"

        alert(stringValue.substr(3));       //"lo world"

        alert(stringValue.slice(3, 7));     //"lo w"

        alert(stringValue.substring(3,7));  //"lo w"

        alert(stringValue.substr(3, 7));    //"lo worl"

       

        alert(stringValue.slice(-3));         //"rld"

        alert(stringValue.substring(-3));     //"hello world"

        alert(stringValue.substr(-3));        //"rld"

        alert(stringValue.slice(3, -4));      //"lo w"

        alert(stringValue.substring(3, -4));  //"hel"

        alert(stringValue.substr(3, -4));     //"" (empty string)

3.字符串的模式匹配方法

1.match

定义和用法:match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

语法:stringObject.match(searchvalue)

stringObject.match(regexp)

 

如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。

var text = "cat, bat, sat, fat";

        var pattern = /.at/;

       

        var matches = text.match(pattern);       

        alert(matches.index);        //0

        alert(matches[0]);           //"cat"

        alert(pattern.lastIndex);    //0

2.search

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

返回值:stringObject 中第一个与 regexp 相匹配的子串的起始位置。

注释:如果没有找到任何匹配的子串,则返回 -1。

语法:stringObject.search(regexp)

说明:search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

.3.replace

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法:stringObject.replace(regexp,replacement)

返回值:一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

说明:如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

 

4.split()

split() 方法用于把一个字符串分割成字符串数组。

语法:stringObject.split(separator,howmany)

1.内置对象

Math对象random方法

例1:var num = Math.floor(Math.random() * 9 + 2);

        alert(num);    //a number between 2 and 10

例2:

  function selectFrom(lowerValue, upperValue) {

            var choices = upperValue - lowerValue + 1;

            return Math.floor(Math.random() * choices + lowerValue);

        }

       

        var num = selectFrom(2, 10);

        alert(num);   //number between 2 and 10 (inclusive)

        从数组中随机取出一个值:

        var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];

        var color = colors[selectFrom(0, colors.length-1)];

        alert(color);  //any of the strings in the array

  1. 作为值的函数

函数本身就是变量 ,可以作为值来使用。

function callSomeFunction(someFunction, someArgument){

            return someFunction(someArgument);

        }

        function add10(num){

            return num + 10;

        }

        var result1 = callSomeFunction(add10, 10);

        alert(result1);   //20

        function getGreeting(name){

            return "Hello, " + name;

        }  

        var result2 = callSomeFunction(getGreeting, "Nicholas");

        alert(result2);   //Hello, Nicholas

访问函数的指针而不执行函数的话,必须去掉函数名后面的圆括号。

可以从一个函数中返回另一个函数:

function createComparisonFunction(propertyName) {

            return function(object1, object2){

                var value1 = object1[propertyName];

                var value2 = object2[propertyName];

                        if (value1 < value2){

                    return -1;

                } else if (value1 > value2){

                    return 1;

                } else {

                    return 0;

                }

            };

        }

        var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];

       

        data.sort(createComparisonFunction("name"));

        alert(data[0].name);  //Nicholas

       

        data.sort(createComparisonFunction("age"));

        alert(data[0].name);  //Zachary  

  1. 函数内部属性

在函数内部,有两个特殊的属性:argument和this

arguments 对象

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。Argument是一个类数组对象,包含着传入参数中的所有参数。

虽然argument的主要用途是保存函数参数,但这个对象还有一个callee的属性,该属性是一个指针,指向拥有这个argument对象的函数。

还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。

This  

关键字 this 总是指向调用该方法的对象 

使用 this,即可在任何多个地方重用同一个函数。请思考下面的例子:

function showColor() {

  alert(this.color);
};
var oCar1 = new Object;
oCar1.color = "red";
oCar1.showColor = showColor;
 
var oCar2 = new Object;
oCar2.color = "blue";
oCar2.showColor = showColor;
 
oCar1.showColor();             //输出 "red"
oCar2.showColor();             //输出 "blue"
 
 

注意,引用对象的属性时,必须使用 this 关键字。例如,如果采用下面的代码,showColor() 方法不能运行:

function showColor() {
  alert(color);
};

如果不用对象或 this 关键字引用变量,ECMAScript 就会把它看作局部变量或全局变量。然后该函数将查找名为 color 的局部或全局变量,但是不会找到。结果如何呢?该函数将在警告中显示 "null"。

  1. 函数属性和方法

每个函数都含有两个属性length和prototype

原文地址:https://www.cnblogs.com/peng14/p/2668209.html