zoukankan      html  css  js  c++  java
  • JavaScript之Number、String、Array常用属性与方法手册

    Number

    isFinite函数

    Number.isFinite() 方法用来检测传入的参数是否是一个有穷数(finite number)。

    语法:

    Number.isFinite(value)

    例:

    Number.isFinite(Infinity);  // false
    Number.isFinite(NaN);       // false
    Number.isFinite(-Infinity); // false
    
    Number.isFinite(0);         // true
    Number.isFinite(2e64);      // true
    
    Number.isFinite('0');       // false, 全局函数 isFinite('0') 会返回 true

    Polyfill

    Number.isFinite = Number.isFinite || function(value) {
        return typeof value === "number" && isFinite(value);
    }

    parseInt()

    Number.parseInt() 方法可以根据给定的进制数把一个字符串解析成整数

    语法:

    Number.parseInt(string[, radix])

    string 必需。要被解析的字符串。
    radix 可选。

    • a.表示要解析的数字的基数。该值介于 2 ~ 36 之间。
    • b.如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 "0x""0X" 开头,将以 16 为基数。
    • c.如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN

    例1:

    // radix为指定基数,说明字符串为多少进制的数字表示。
    let strObj = '0110';
    console.log(Number.parseInt(strObj, 2)); // 6
    console.log(Number.parseInt(strObj, 10)); // 110

    例2:["1", "2", "3"].map(parseInt)的结果

    ["1", "2", "3"].map(parseInt)相当于[parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)],parseInt("3", 2) 的第二个参数是界于 2-36 之间的,之所以返回 NaN 是因为 字符串 "3" 里面没有合法的二进制数,所以 NaN。

    parseFloat()

    parseFloat方法用于将一个字符串转为浮点数。

    parseFloat('3.14') // 3.14

    如果字符串符合科学计数法,则会进行相应的转换。

    parseFloat('314e-2') // 3.14
    parseFloat('0.0314E+2') // 3.14

    如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。

    parseFloat('3.14more non-digit characters') // 3.14

    parseFloat方法会自动过滤字符串前导的空格。

    parseFloat('	v
    12.34
     ') // 12.34

    如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN。

    parseFloat([]) // NaN
    parseFloat('FF2') // NaN
    parseFloat('') // NaN

    上面代码中,尤其值得注意,parseFloat会将空字符串转为NaN

    这些特点使得parseFloat的转换结果不同于Number函数。

    parseFloat(true)  // NaN
    Number(true) // 1
    
    parseFloat(null) // NaN
    Number(null) // 0
    
    parseFloat('') // NaN
    Number('') // 0
    
    parseFloat('123.45#') // 123.45
    Number('123.45#') // NaN

     toFixed()

    方法使用定点表示法来格式化一个数。

    语法:

    numObj.toFixed(digits)

    参数说明:

    digits:小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。
    var a=2.1512131231231321;  
    

    String

    substring()

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

    语法:

    stringObject.substring(start,stop)
    • start:必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
    • stop:可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。

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

    substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。

    如果参数 startstop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。如果 startstop 大,那么该方法在提取子串之前会先交换这两个参数。

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

    var str="Hello world!"
    console.log(str.substring(3)); //lo world!
    console.log(str.substring(3,7));//lo w

    substr()

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

    语法:

    stringObject.substr(start,length)

    参数:

    • start:必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
    • length:可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

    返回值:一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length 个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

     注释:substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。
    重要事项:ECMAscript 没有对该方法进行标准化,因此反对使用它。
    重要事项:在 IE 4 中,参数 start 的值无效。在这个 BUG 中,start 规定的是第 0 个字符的位置。在之后的版本中,此 BUG 已被修正。

    例如:

    var str="Hello world!"
    console.log(str.substr(3,7)) //lo worl

    charAt()

    定义和用法:charAt() 方法可返回指定位置的字符。

    请注意,JavaScript 并没有一种有别于字符串类型的字符数据类型,所以返回的字符是长度为 1 的字符串。

    语法:

    stringObject.charAt(index)

    注释:字符串中第一个字符的下标是 0。如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。

    例子,在字符串 "Hello world!" 中,我们将返回位置 1 的字符:

    var str="Hello world!"
    document.write(str.charAt(1)) //e

     charCodeAt()

    用法:charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数
    语法:

    stringObject.charCodeAt(index)

    参数说明:
    index参数必填,表示字符串中某个位置的数字,即字符在字符串中的下标。
    注:字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN
    例如:

    var str="Hello world!"
    document.write(str.charCodeAt(1))
    //结果:101

    fromCharCode() 

    定义和用法:fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。

    语法:

    String.fromCharCode(numX,numX,...,numX)

    numX:必需。一个或多个 Unicode 值,即要创建的字符串中的字符的 Unicode 编码。

    注释:该方法是 String 的静态方法,字符串中的每个字符都由单独的数字 Unicode 编码指定。

    它不能作为您已创建的 String 对象的方法来使用。因此它的语法应该是 String.fromCharCode(),而不是 myStringObject.fromCharCode()。

    例如,我们将根据 Unicode 来输出 "HELLO" 和 "ABC":

    <script type="text/javascript">
    document.write(String.fromCharCode(72,69,76,76,79))
    document.write("<br />")
    document.write(String.fromCharCode(65,66,67))
    </script>

    split()

    语法:

    stringObject.split(separator,howmany)
    • separator:必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。
    • howmany:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

    返回值:一个字符串数组,String.split() 执行的操作与 Array.join() 执行的操作是相反的。

    "2:3:4:5".split(":")    //将返回["2", "3", "4", "5"]
    "|a|b|c".split("|")    //将返回["", "a", "b", "c"]

    如果您希望把单词分割为字母,或者把字符串分割为字符,可使用下面的代码:

    "hello".split("")    //可返回 ["h", "e", "l", "l", "o"]

    若只需要返回一部分字符,请使用 howmany 参数:

    "hello".split("", 3)    //可返回 ["h", "e", "l"]

     toString()

    toString() 方法可把一个逻辑值转换为字符串,并返回结果。

     javascript中的toString()方法,主要用于Array、Boolean、Date、Error、Function、Number等对象。

    (1)Array.toString():将数组转换成一个字符串,并且返回这个字符串。

    描述:当数组用于字符串环境中时,javascript会调用这一方法将数组自动转换成一个字符串。toString()在把数组转换成字符串时,首先要将数组的每个元素都转换成字符串(通过调用这些元素的toString方法)。当每个元素都被转换成字符串时,它就以列表的形式输出这些字符串,字符串之间用逗号分隔。返回值与没有参数的jion()方法返回的字符串相同。

    例如:

    var arr = ['php','mysql','apache'];
    console.log(arr.join()); //php,mysql,apache
    console.log(arr.toString());//php,mysql,apache

    (2)Boolean.toString():将布尔值转换为字符串。

    描述:根据原始布尔值或者Boolean对象的值返回字符串“true”或“false”。

    例如:

    var b = new Boolean();//boolean对象默认值为false
    console.log(b.toString()); //false
    console.log(("chia" == "chia").toString());//true

    (3)Date.toString():将Date对象转换成一个字符串,采用本地时间。

    var today = new Date();
    console.log(today);//Tue Mar 28 2017 09:16:27 GMT+0800 (中国标准时间)
    console.log(today.toString());//Tue Mar 28 2017 09:16:27 GMT+0800 (中国标准时间)
    console.log(today.toLocaleString());//2017/3/28 上午9:16:27

    注意:toLocaleString()是返回采用地方日期使用地方日期格式的规范的字符串。

    (4)Error.toString():将Error对象转换成字符串
    描述:实现定义的字符串。ECMAScript标准除了规定该方法的返回值是字符串外,没有再做其他规定。尤其是,它不要求返回的字符传包含错误名和错误信息。

    (5)Function.toString():把函数转换成字符串

    描述:可以以一种与实现相关的方法将函数转换成字符串。在大多数的实现中,例如ie和firefox,它返回Function关键字、参数列表、函数体部分。

    function add(a,b){
        var a,b,c;
        c = a + b;
        return c;
    }
    console.log(add.toString()); 

    结果:

    function add(a,b){
        var a,b,c;
        c = a + b;
        return c;
    }

    (6)Number.toString():将数字转换为字符串。用它的参数指定的基数或底数(底数范围为2-36)。如果省略参数,则使用基数10。当参数值为2时,返回二进制数。

    var a = 34;
    console.log(a.toString());//34
    console.log(a.toString(2));//100010
    console.log(a.toString(8));//42
    console.log(a.toString(16));//22

     参考地址:http://www.cnblogs.com/muguaworld/archive/2008/07/18/1246338.html

    indexOf()

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

    语法:

    stringObject.indexOf(searchvalue,fromindex)

    searchvalue:必需。规定需检索的字符串值。

    fromindex:可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。

    indexOf() 方法对大小写敏感!

    如果要检索的字符串值没有出现,则该方法返回 -1。

    <script type="text/javascript">
    var str="Hello world!"
    document.write(str.indexOf("Hello") + "<br />")//0
    document.write(str.indexOf("World") + "<br />")//-1
    document.write(str.indexOf("world")) //6
    </script>

    操作DOM也可能用上:

    var elems=node.getElementsByTagName("*");
     for(var i=0;i<elems.length;i++){
          if(elems[i].className.indexOf(classname)!=-1){ 
    
          }
      }

    lastIndexOf()

    lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。

    语法:

    stringObject.lastIndexOf(searchvalue,fromindex)

    searchvalue:必需。规定需检索的字符串值。

    fromindex:可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符处开始检索。

    lastIndexOf() 方法对大小写敏感!

    如果要检索的字符串值没有出现,则该方法返回 -1。

    var str="Hello world world!"
    console.log(str.lastIndexOf("Hello")); //0
    console.log(str.lastIndexOf("World")); //-1
    console.log(str.lastIndexOf("world")); //12
    console.log(str.lastIndexOf("world",9)); //6

    Array

    Array map()

    定义和用法:map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。map() 方法按照原始数组元素顺序依次处理元素。

    注意:map() 不会对空数组进行检测,不会改变原始数组。

    语法:

    array.map(function(currentValue,index,arr), thisValue)

    参数说明:

    • function(currentValue, index,arr):必须。函数,数组中的每个元素都会执行这个函数,其中函数参数,currentValue:必须,当前元素的值;index:可选。当前元素的索引值;arr:可选。当前元素属于的数组对象。
    • thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
    var data = [1, 2, 3, 4];
    var arrayOfSquares = data.map(function (item) {
      return item * item;
    });
    alert(arrayOfSquares); // 1, 4, 9, 16

    由于低版本IE9以下不支持,Array.prototype扩展可以让IE6-IE8浏览器也支持map方法:

    if (typeof Array.prototype.map != "function") {
      Array.prototype.map = function (fn, context) {
        var arr = [];
        if (typeof fn === "function") {
          for (var k = 0, length = this.length; k < length; k++) {      
             arr.push(fn.call(context, this[k], k, this));
          }
        }
        return arr;
      };
    }

    扩展,怎样在字符串中使用map

    例:在一个String上使用 map 方法获取字符串中每个字符所对应的 ASCII 码组成的数组

    var map = Array.prototype.map
    var a = map.call("Hello World", function(x) { return x.charCodeAt(0); })
    // a的值为[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

    由map方法引发的一个题目["1", "2", "3"].map(parseInt)

    通常情况下,map 方法中的 callback 函数只需要接受一个参数(很多时候,自定义的函数形参只有一个),就是正在被遍历的数组元素本身。

    但这并不意味着 map 只给 callback 传了一个参数(会传递3个参数)。这个思维惯性可能会让我们犯一个很容易犯的错误。

    // 下面的语句返回什么呢:
    ["1", "2", "3"].map(parseInt);
    // 你可能觉的会是[1, 2, 3]
    // 但实际的结果是 [1, NaN, NaN]
    
    // 通常使用parseInt时,只需要传递一个参数.但实际上,parseInt可以有两个参数.第二个参数是进制数.可以通过语句"alert(parseInt.length)===2"来验证.
    // map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身.
    // 第三个参数parseInt会忽视, 但第二个参数不会,也就是说,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN.
    
    //应该使用如下的用户函数returnInt
    function returnInt(element){
      return parseInt(element,10);
    }
    
    ["1", "2", "3"].map(returnInt);// 返回[1,2,3]

    提示下parseInt()方法,其语法为:parseInt(string, radix);string为必须参数,被解析的字符串。radix 可选。

    a.表示要解析的数字的基数。该值介于 2 ~ 36 之间。
    b.如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 "0x""0X" 开头,将以 16 为基数。
    c.如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN

    所以:["1", "2", "3"].map(parseInt)相当于[parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)]。parseInt("3", 2) 的第二个参数是界于 2-36 之间的,之所以返回 NaN 是因为 字符串 "3" 里面没有合法的二进制数,所以 NaN。

    案例地址:JavaScript Puzzlers 解密(一):为什么 ["1", "2", "3"].map(parseInt) 返回 [1, NaN, NaN]?

    Array some()

    例:检测数组中是否有元素大于 18:

    var ages = [3, 10, 18, 20];
    
    function checkAdult(age) {
        return age >= 18;
    }
    
    function myFunction() {
        document.getElementById("demo").innerHTML = ages.some(checkAdult);
    }

    结果:true

    some() 方法会依次执行数组的每个元素:

    • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
    • 如果没有满足条件的元素,则返回false。

    注意:
    some() 不会对空数组进行检测。
    some() 不会改变原始数组。
    浏览器支持:IE9以及以上。

    语法:function(currentValue, index,arr)

    详细参考:http://www.runoob.com/jsref/jsref-some.html

    Array filter()

    例:返回数组 ages 中所有元素都大于 18 的元素:

    var ages = [32, 33, 16, 40];
    
    function checkAdult(age) {
        return age >= 18;
    }
    
    function myFunction() {
        document.getElementById("demo").innerHTML = ages.filter(checkAdult);
    }

    结果:32,33,40

    filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

    注意:
    filter() 不会对空数组进行检测。
    filter() 不会改变原始数组。
    浏览器支持:IE9以及以上。

    语法:array.filter(function(currentValue,index,arr), thisValue)

    详细参考:http://www.runoob.com/jsref/jsref-filter.html

    Array indexOf()

    搜索 Array 对象的指定元素并返回该元素的索引。 此函数是静态的,可在不创建对象实例的情况下调用。

    语法:

    var indexVar = Array.indexOf(array, item, start);

    术语

    定义

    array

    要搜索的数组。

    item

    要在数组中查找的对象。

    startIndex

    (可选)指定在数组中搜索的起始元素的索引号。

    返回:

    如果找到 item,则返回表示该元素在数组中的索引位置的编号;否则返回 -1。

    在 Mozilla Firefox 中,如果调用 indexOf 时未设置 item 或将其设置为 undefined,则返回值为 undefined 的第一项的索引。 在同样的情况下,所有其他浏览器都返回 -1。

    使用 indexOf 函数可确定某个元素在数组实例中第一次出现的索引位置。

    下面的示例演示如何使用 indexOf 函数查找指定项的索引位置。 返回的索引是在 item 中指定的项的第一次出现。 再次调用该函数,并指定大于所找到元素的索引的起始索引值,可查找 item 的下一次出现。

    var a = ['red', 'blue', 'green', 'blue'];
    var myFirstIndex = Array.indexOf(a, "blue");
    // View the results: "1"
    alert("myFirstIndex: " + myFirstIndex);
    var mySecondIndex = Array.indexOf(a, "blue", (myFirstIndex + 1) );
    // View the results: "3"
    alert("mySecondIndex: " + mySecondIndex);

    Array includes()(ES6)

    IE浏览器不支持

    includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
    语法:

    arr.includes(searchElement)
    arr.includes(searchElement, fromIndex)

    searchElement:需要查找的元素值
    fromIndex(可选):从该索引处开始查找 searchElement。如果为负值,则按升序从 array.length - fromIndex 的索引开始搜索。默认为 0。

    返回值:一个 Boolean。

    var array1 = [1, 2, 3];
    
    console.log(array1.includes(2));
    // expected output: true
    
    var pets = ['cat', 'dog', 'bat'];
    
    console.log(pets.includes('cat'));
    // expected output: true
    
    console.log(pets.includes('at'));
    // expected output: false

    参考地址:Array.prototype.includes()

    Array find()(ES6)

    IE浏览器不支持

    find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

    var array1 = [5, 12, 8, 130, 44];
    
    var found = array1.find(function(element) {
      return element > 10;
    });
    
    console.log(found);
    // expected output: 12

    用对象的属性查找数组里的对象

    var inventory = [
        {name: 'apples', quantity: 2},
        {name: 'bananas', quantity: 0},
        {name: 'cherries', quantity: 5}
    ];
    
    function findCherries(fruit) { 
        return fruit.name === 'cherries';
    }
    
    console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

    寻找数组中的质数

    function isPrime(element, index, array) {
      var start = 2;
      while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) {
          return false;
        }
      }
      return element > 1;
    }
    
    console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
    console.log([4, 5, 8, 12].find(isPrime)); // 5

    参考地址:Array.prototype.find()

    Array findIndex()(ES6)

    IE浏览器不支持

    findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

    var array1 = [5, 12, 8, 130, 44];
    
    function findFirstLargeNumber(element) {
      return element > 13;
    }
    
    console.log(array1.findIndex(findFirstLargeNumber));
    // expected output: 3

    参考地址:Array.prototype.findIndex()

    join()

    join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

    语法:

    arrayObject.join(separator)  //separator:可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。

    注意:返回的是一个字符串。

    例如:

    <script type="text/javascript">
    var arr = new Array(3)
    arr[0] = "George"
    arr[1] = "John"
    arr[2] = "Thomas"
    document.write(arr.join("."))
    </script>

    输出:George.John.Thomas

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    链式表的按序号查找
    可持久化线段树——区间更新hdu4348
    主席树——树链上第k大spoj COT
  • 原文地址:https://www.cnblogs.com/moqiutao/p/6408501.html
Copyright © 2011-2022 走看看