zoukankan      html  css  js  c++  java
  • JavaScript基本类型与引用类型(二)

    前文已经对基本类型和引用类型作了简单的介绍,本文将进一步介绍基本类型和引用类型。

    基本包装类型

      为了方便操作基本类型的值,JavaScript提供了特殊的引用类型:Boolean、Number、String。这些类型与其他的引用类型相似,但是也具有各自的基本类型的特殊行为。每读取一个基本类型,后台都会创建一个对应的基本包装类型的对象。

    1 var str="hello world";
    2 var str1=str.substring(0,3);
    3 console.log(str1);
      上面的代码定义了变量str,str包含一个字符串,字符串是一个基本类型的值。第二行调用了str的substring方法,我们知道str是基本类型,基本类型没有方法和属性。但是我们这里为什么能够调用方法,那是因为JavaScript在后台进行了一系列的处理。第二行在读取字符串str时,后台做了如下处理:

    创建String类型的一个实例;
    在实例上调用执行的方法;
    销毁这个实例。
      可以用下面的代码表示上面的三个步骤:

      

    1 var str= new String("hello world");
    2 var str1 = str.substring(0,3);
    3 str=null;
      经过上面的处理,基本的字符串值就变成了String对象。上面的过程适用于Boolean、Number和String。但是引用类型与基本包装类型是有区别的,我们虽然可以通过str调用相关方法,但是我们不能为str添加额外的属性和方法。

    1 var str= "hello world";
    2 str.test="1111";
    3 console.log(str.test);//undefined
    4 str1.test="1111";
    5 console.log(str1.test);//1111
      上面的代码,在第二行为str添加了属性test,但是我们在第三行访问该属性,并没有test属性,添加不成功。但是我们通过String对象实例的str1,添加了test属性可以正常访问。

      我们不提倡显式地调用Boolean、Number和String对象,会让我们在处理变量的时候容易出错,很难分清是引用类型还是基本包装类型。基本包装类型typeof的返回值为object。

      通过new 调用基本包装类型构造函数,和调用同名的转型函数是不一样的。

      

    1 var num="25";
    2 num=Number(25);
    3 console.log(typeof num);
    4 var num1 = new Number("25");
    5 console.log(typeof num1);
      在第二行调用了转型函数,num由字符串类型转为数字类型,typeof输出为numbeer。但是通过 new Number创建的变量的num1的typof是object类型。

    Boolean类型

     Boolean类型是与布尔值对于的引用类型。要创建Boolean对象,可以使用构造函数 new,并传入true或者false值。

    var flag = new Boolean(true);
    var result=flag&&true;
    console.log(result);
      Boolean实例重写了valueOf方法,返回基本类型值true或者false,重写了toString方法,返回"true"或者“false”。上面的代码我们使用Boolean构造函数创建了对象flag,第二行通过&&表达式求值。最后的值为true。

    Number类型

      Number类型是数字值对应的引用类型。要创建Number类型,可以调用Number构造函数,并传递数字值。Number提供了toFixed方法,可以对数值进行四舍五入,并保留指定的小数位数。

    1 var num=12.345343555222;
    2 console.log(num.toFixed(6));//12.345344
      上面的代码第一行创建了一个num变量,并赋值。第二行调用toFixed方法,保留小数点后6位有效数字,并进行四舍五入。

    String类型

      String类型是字符串的对象包装类型。可以使用String构造函数来创建。

    1 var str = new String("hello javascript");
      上面通过String构造函数创建了字符串的对象包装类型。String类型提供了一些常用的操作方法。

    字符方法
       String类型提供了两个用于访问字符的方法:charAt和charCodeAt。两个方法都是传入一个参数,基于0的字符位置。charAt返回字符串给定位置的字符。

    1 var str = new String("hello javascript");
    2 var str1=str.charAt(1);
    3 console.log(str1);//e
      上面的方法调用String类型的charAt方法,返回字符e。

      charCodeAt返回字符串指定位置的字符编码。

      

    1 var str = new String("hello javascript");
    2 var str1=str.charCodeAt(1);
    3 console.log(str1);//101
    字符串操作方法
      String类型有很多常用的字符串操作方法。concat方法,用于拼接字符串。

      

    1 var str="hello";
    2 var str1=str.concat(" world");
    3 console.log(str1);//hello world
      JavaScript提供了三个基于字符串创建新的字符串的方法:slice、substr、substring。三个方法都是接收一个或者两个参数。第一个参数指定字符串的开始位置,slice和substring的第二个参数是字符串的结束位置。substr第二个参数指字符个数。如果没有第二个参数,三个方法都是到字符串的末尾。

    1 var str="hello world";
    2 var str1=str.slice(1,3);
    3 var str2=str.substr(1,3);
    4 var str3=str.substring(1,3);
    5 console.log(str1);//el
    6 console.log(str2);//ell
    7 console.log(str3);//el
      上面的代码介绍了slice、substr和substring的用法。可以看到str1和str3的值是相同的。但是当我们传入的参数是负值的情况下,返回的值就不同了。slice方法将传入的负值与字符串的长度相加,substr将传入的第一个负值与字符串的长度相加。substring将所有负值参数都变为0。

    1 var str="hello world";
    2 var str1=str.slice(-3,-1);//相当于slice(8,10)
    3 var str2=str.substr(-1);//相当于substr(10);
    4 var str3=str.substring(-1,3);//相当于substring(0,3)
    5 console.log(str1);//rl
    6 console.log(str2);//d
    7 console.log(str3);//hel
    字符串位置方法
      String类型提供了两个查找字符位置的方法,indexOf和lastIndexOf。这个两个方法都是从一个字符串搜索给定的子字符串方法的位置,如果搜索不到则返回-1。indexOf是从字符串的开始位置搜索,lastIndexOf是从字符串的末尾开始搜索。indexOf和lastIndexOf都可以传递第二个参数,表示从字符串的哪个位置开始搜素。

      

    1 var str="hello world";
    2 var i = str.indexOf("el");
    3 var j = str.lastIndexOf("hl");
    4 console.log(i);//1
    5 console.log(j);//-1
    1 var str="hello javascript i love you";
    2 var arry=[];
    3 var pos=str.indexOf("o");
    4 while(pos>-1){
    5 arry.push(pos);
    6 pos=str.indexOf("o",pos+1);
    7 }
    8 console.log(arry.toString());//4,20,25
      上面的代码在长的字符串中拥有多个指定的字符o,通过循环调用indexOf,并传入了第二个参数。或者了每个给定字符的位置。

      String类型中还提供了trim方法,可以删除前置以及后缀的所有空格,并返回新的字符串。

      var str=" hello world "; var str1=str.trim(); console.log(str1);//hello world

      String类型还提供了字符串进行大小写转换的方法。比如toUpperCase、toLowerCase。

    1 var str="Hello World";
    2 console.log(str.toUpperCase());//HELLO WORLD
    3 console.log(str.toLowerCase());//hello world
    字符串模式匹配方法
      前面已经介绍过正则表达式的模式匹配,也简单介绍了字符串的迷失匹配方法。本节进一步介绍字符串的模式匹配方法。

      String类型提供了几个常用的模式匹配方法,match方法在本质上与RegExp的exec方法相似。match方法只接受一个参数,要么是一个正在表达式,要么 是一个RegExp对象。

      

    var str="cat bat dat xat";
    var pattern=/.at/;
    var str1=str.match(pattern);
    console.log(str1[0]);
    console.log(str1.index);
    console.log(pattern.lastIndex);
      上面的代码的代码输出cat,0,0

  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/ggz19/p/8185110.html
Copyright © 2011-2022 走看看