zoukankan      html  css  js  c++  java
  • js基本包装类型

    基本包装类型

     
    3种特殊的引用类型
    为了便于操作基本类型值,es还提供了3种特殊的引用类型: Boolean,Number,String。 每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作数据。
     
    1. var s1="some text";
    2. var s2=s1,substring(2);
     
    我们知道,基本类型之不是对象,既而他们不应该具有方法。其实为了实现这种直观的操作,后台已经自动完成了一系列的处理。当第二行代码访问s1时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理。
    1>创建String类型的一个实例
    2>在实例上调用特定的方法
    3>销毁这个实例、
    1. var s1=new String("some text");
    2. var s2=s1.substring(2);
    3. s1=null;
    这也使用与Boolean和String类型.
     

    引用类型与基本包装类型的主要区别

    引用类型与基本包装类型的主要区别就是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的实例,则值存在于一行代码的执行瞬间,然后立即被销毁。==》这意味着我们不能在运行时向基本类型值添加属性和方法。
    1. var s1="some text";
    2. s1.color="red";
    3. alert( s1.color);
    第二行代码视图为字符串s1添加一个color属性。但是,当第3行代码再次访问s1时,其color属性不见了。问题的原因就是第二行创建的String对象在执行第三行代码时已经被销毁了。第3行代码又创建自己的String对象,而该对象没有color属性。
     
     
    Object构造函数会像工厂方法,根据传入值的类型返回相应基本包装类型的实例
    1. var obj=new Object("some");
    2. console.log(obj instanceof String );//true
    使用new调用基本包装类型的构造函数.,与直接调用同名的转型函数是不一样的。
     
    1. var value="25";
    2. var number=Number(value);//转型函数
    3. alert(typeof number);//number
    4. var obj=new Number(value);//构造函数
    5. alert(typeof obj);//object
     

    Boolean类型

     
    Boolean类型是与布尔值对应的引用类型。要创建Boolean对象,可以像下面这样调用Boolean构造函数并传入true或false值;
    1. var boolean=new Boolean(true);
    2. alert(boolean.valueOf());//true
     
    Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false;重写了toString()方法,返回字符串”true”和”false”。Boolean对象在es中的用处不大,常造成误解。常见的问题就是在布尔表达式中使用Boolean对象
     

    布尔值与布尔对象的区别

    //建议不要使用Boolean对象
    1. var falseObject=new Boolean(false);
    2. var result=falseObject&&true;//这里是对布尔对象求值
    3. alert(result);//true
    4. var falseValue=false;
    5. result=falseValue&&true;//这里是对布尔值就值
    6. alert(result);//false
    在布尔运算中false&&true等于false,可是实例中的这行代码是对falseObject而不是对它的值进行求值。布尔表达式中的所有对象都会被转换成true,因此falseObject对象在布尔表达式中代码的是true。所有true&&true等于true
     
     

    Number类型

     
    Number是与数字值对应的应用类型。要创建Number对象,可以在调用Number构造函数时向其中传递相应的数值。
    var numberObject=new Number(10);
     
    与Boolean类型一样,Number类型也重写了valueOf().toLocalString()和toString()方法,
    重写后的valueOf()方法返回对象表示的基本类型的数值,另外2个方法则返回字符串形式的数值
    1. var numberObject=new Number(10);
    2. alert(typeof(numberObject.toString()));//String
    3. //可以为toString()方法传递一个表示基数的参数,告诉它返回几进制数值的字符串形式
    4. alert(numberObject.toString(2));//二进制"1010"
    5. alert(numberObject.toString(8));//"12"
    6. alert(numberObject.toString(10));//"10"
    7. alert(numberObject.toString(16));//"a"
     

     

    toFixed()

    除了继承来的方法外,Number类型还提供了一些将数值格式化为字符串的方法。
    toFixed() 方法会按照指定的小数位返回数值的字符串表示
    1. var num=10;
    2. var num2=10.005
    3. alert(num.toFixed(2));//10.00
    4. alert(num2.toFixed(2));//10.01//应为这里要保留2位,实际有3位,就会四舍五入,很适合处理货币。
    5. alert(typeof num.toFixed(2));//String
    //ie8及之前的版本不能正确四舍五入范围在{(-0.94,-0.5],[0.5,0.94)}之间的值,对于这个返回的值,ie会返回0而不是-1或1。

    toExponential()

    格式化数值,返回以指数表示法表示的数值的字符串形式,该方法也就收一个参数,指定输出结果中的小数位数
    1. var num=10;
    2. alert(num.toExponential(1));//1.0e+1
    3. alert(num.toExponential(2));//1.00e+1
     
    不建议直接实例化Number类型,原因与Boolean一样
    1. var numberObject=new Number(10);
    2. var number=10;
    3. alert(typeof numberObject);//object
    4. alert(typeof number);//Number
    5. alert(numberObject instanceof Number);//true
    6. alert(number instanceof Number);//false

    String类型

    String类型是字符串的对象包装类型
    var stringObject=new String(“hello world”);
    String对象的方法也可以在所有基本的字符串中访问到。其中,继承的valueOf(),toLocalString(),toString(),都返回对象所表示的基本字符串值。
    String类型的每个实例都有一个length属性,表示字符串的长度
    1. var string="hello world"
    2. alert(string.length);//11

     

    字符方法charAt()和charCodeAt();

    用于访问字符串中特定字符的方法:charAt()和charCodeAt();
    //都接收1个参数,
    charAt()方法返回给定位置的字符。
    1. var string="hello world";
    2. alert(string.charAt(1));//e
  • 相关阅读:
    第三节 java 数组(循环遍历、获取数组的最值(最大值和最小值)、选择排序、冒泡排序、练习控制台输出大写的A)
    第三节 java 数组
    brpc
    thrift 总结
    C++ 中 # 和## 的使用
    查看系统句柄数
    zenuml
    shell脚本
    resize() reserve()函数的区别(vector)
    grep 用法
  • 原文地址:https://www.cnblogs.com/yi-mi-yangguang/p/7550116.html
Copyright © 2011-2022 走看看