基本包装类型

 
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

最新文章

  1. 用spm2构建seajs项目的过程
  2. 自制Https证书并在Spring Boot和Nginx中使用
  3. python 之 append extend
  4. 查单神器v1.0 升级 →B站看鬼畜神器v1.0
  5. 在javascript中如何取消事件冒泡
  6. Specify a culture in string conversion explicitly
  7. Tomcat绑定多个IP地址 多域名绑定
  8. 第十节,While循环和for循环
  9. [刷题]算法竞赛入门经典(第2版) 5-12/UVa511 - Do You Know the Way to San Jose?
  10. I - Intersection HDU - 5120(圆环相交面积)
  11. html实现调用jar包
  12. 00.pt-toolkit 目录
  13. .net异常机制
  14. 算术运算,赋值运算,if语句,while,continue语句
  15. SQL SERVER字符串中的空格去除
  16. node-webkit学习(1)hello world
  17. Java内部类的介绍
  18. Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏
  19. Casual Note of OS
  20. web程序的配置文件的修改

热门文章

  1. ubuntu15.4、16.4、17.4设置nginx自启动
  2. 开启MySQL远程访问权限 允许远程连接(阿里云服务器)、linux关闭防火墙
  3. leetcode python丑数
  4. Springboot的Mybatis逆向工程
  5. mysql 5.7.20 取得动态sql执行结果
  6. js中构造函数的原型添加成员的两种方式
  7. 算法竞赛模板 AC自动机
  8. 算法竞赛模板 动态规划之背包DP
  9. cordova-plugin-alipay-v2使用篇(更新至20170725)(亲测可用)
  10. 【学术篇】The Xuanku Inversion Magic学习笔记