基本包装类型

ECMAScript5还提供了三个特殊的引用类型:Boolean Number String
这些类型与其他的引用类型相似,但是也具有各自的基本类型的特殊行为。每当读取一个基本类型值的时候,
后台就会创建一个对应的基本包装类型的对象

1         var s1 = "some text";
2         var s2 = s1.substring(2);

s1包含一个字符串是一个基本类型值,所以不可能有方法,但是在后台经历了这样三个过程:

(1)创建String类型的一个实例
(2)在实例上调用指定的方法
(3)销毁这个实例

三个步骤执行了下列ECMAScript实例

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); //undefined

还可以显示的调用Boolean、Number、String来创建基本包装类型的对象(不推荐这样做,因为容易分不清是引用类型还是基本包装类型)对基本包装类型的实例调用typeof会返回"object",而且所有的基本包装类型的对象都会被转换成布尔值true

1         var obj = new Object("some text");
2         alert(obj instanceof String); //true

传入数值参数则会得到Number实例,Boolean同样
注意:使用new调用基本包装类型的构造函数,与直接调用同民的转型函数是不一样的

1         var result = "25";
2         var number = Number(result);
3         alert(typeof number);//"number"
4
5         var obj = new Number(result);
6         alert(typeof number);//"object"

Boolean类型



Boolean类型是与布尔值对应的引用类型。

1     var booleanObject = new Boolean(true);

Boolean对象在ECMAScript中的用处不大,因为常会造成人们的误解

1         var falseObject = new Boolean(false);
2         var result = falseObject && true;//所有的基本包装类型的对象都会被转换成布尔值true
3
4         alert(result); //true
5
6         var falseValue = false;
7         var result = falseValue && true;
8         alert(result);//false

 

Number类型


1     var numberObject = new Number(10);

与Boolean类型一样,Number类型也重写了valueOf()、toLocaleString()、toString()方法。重写后的valueOf方法返回对象表示的基本类型的数值,另外两个方法返回字符串形式的数值。可以为toString()方法传递一个表示基数的参数,告诉它返回几进制数值的字符串形式

1         var num = 10;
2         alert(num.toString()); //"10"
3         alert(num.toString(2)); //"1010"

toFixed()方法会按照指定的小数位返回数值的字符串表示

1         var num = 10;
2         alert(num.toFixed(2)); //"10.00"
3
4         var num = 10.005;
5         alert(num.toFixed(2));//"10.01"

toExponential()方法返回以指数表示法表示的数值的字符串形式

1         var num = 10;
2         alert(num.toExponential(1));//"1.0e+1" 参数设置返回值的小数位

toPrecision()方法可能会返回固定大小格式,也可能返回指数格式,具体规则看哪种格式最合适。接受一个参数,表示数值所有数字的位数(不包括指数部分)

1         var num = 99;
2         alert(num.toPrecision(1)); //"1e+1"
3         alert(num.toPrecision(2)); //"99"
4         alert(num.toPrecision(3)); //"99.0"

不建议直接实例化Number类型,原因与显示创建Boolean类型一样,具体来讲就是typeof和instanceof操作符测试基本类型与引用类型数值时,得到的结果完全不同。

1         var numberObject = new Number(10);
2         var numberValue = 10;
3         alert(typeof numberObject); //"object"
4         alert(typeof numberValue); //"number"
5         alert(numberObject instanceof Number); //true
6         alert(numberValue instanceof Number); //false

 

String类型

1      var stringObject = new String("hello word");

继承的valueOf()、toLocaleString()、toString()都返回对象所表示的基本字符串值。String类型的每个实例都有一个length属性,表示字符串中包含多个字符。

1          var stringValue = "hello word";
2          alert(stringValue.length); //"11";

String类型提供了很多方法,用于辅助完成对ECMAScript中字符串的解析和操作

1、字符方法

两个用于访问字符串中特定字符的方法:charAt()和charCodeAt()
charAt()方法以单字符的形式返回给定位置的那个字符(基于0)
charCodeAt()方法返回给定位置的那个字符的字符编码

1          var stringValue = "hello word";
2          alert(stringValue.chartAt(1)); //"e"
3          alert(stringValue.charCodeAt(1)); //"101"

ECMAScript5还定义了另一个访问个别字符串的方法,可以用方括号加数字索引来访问字符串中特定字符

1          var stringValue = "hello word";
2          alert(stringValue[1]); //"e"

2、字符串操作方法

concat()方法用于拼接一个或者多个字符串,返回拼接后新的字符串(在实际中用的更多的换是+操作符)

1          var stringValue = "hello";
2          var result = stringValue.concat(" word !");
3          alert(result); //"hello word !"
4          alert(stringValue); //"hello"

ECMAScript5还提供了三个基于子字符串创建新字符串的方法:slice()、substr()、substring()。都接受一到两个参数,第一个参数表示子字符串开始的位置,第二个参数表示子字符串结束的位置。具体来说,slice()、substring()第二个参数表示子字符串最后一个字符后面的位置,而substr()的第二个参数指定的则是返回的字符个数。

1          var stringValue = "hello word";
2          alert(stringValue.slice(3));//"llo world"
3          alert(stringValue.slice(3, 7)); //"lo w"
4          alert(stringValue.substring(3, 7)); //"lo w"
5          alert(stringValue.substr(3, 7)); //"lo worl"

在传递给这些方法的参数时负值时。slice()会将负值与字符串的长度相加,substr()方法将负的第一个参数字与符串的长度相加,将负的第一个参数转换为0。substring()
方法会将所有的负值转换为0。

3、字符串位置方法

indexOf()从开头向后搜索子字符串
lastIndexOf()从末尾开始向前搜索子字符串

1          var stringValue = "hello word";
2          alert(stringValue.indexOf("o")); //4
3          alert(stringValue.lastIndexOf("o")); //7

这两个方法都可以接受第二个参数,表示从子字符串的哪个位置开始搜索。

1          var stringValue = "hello word";
2           alert(stringValue.indexOf("o",6)); //7
3          alert(stringValue.lastIndexOf("o",6)); //4

可以通过循环调用indexOf()和lastIndexOf()来找到所有匹配的子字符串。

1          var stringValue = "Lorem ipsum dolor sit amet,consectetur adipisicing elit"
2          var positions = new Array();
3          var pos = stringValue.indexOf("e");
4          while(pos >= -1){
5              positions.push(pos);
6              pos = stringValue.indexOf("e",pos + 1);
7          }
8          alert(positions); //"3,24,32,35,52"

4.trim()方法

这个方法会创建一个字符串的副本,删除前置及后置的所有空格

1          var stringValue = "   hello world   ";
2          var trimmedStringValue = stringValue.trim();
3          alert(trimmedStringValue); //"hello world"

5.字符串大小写转换方法

经典方法:toLowerCase()和toUpperCase()
toLocaleLowerCase()和toLocaleUpperCase()方法则是针对特定地区的实现

6、字符串的模式匹配方法

match(),在字符串上调用这个方法,本质上一调用RegExp的exec()方法相同。
只接受一个参数要么是一个正则表达式要么是一个RegExp对象。

1          var text = "cat,bat,sat,fat";
2          var pattern = /.at/;
3          var matches = text.match(pattern);
4          alert(matches.index); //0
5          alert(matches[0]); //"cat"

search(),返回字符串中第一个匹配项的索引,如果没有找到匹配项,则返回-1,接受的参数与match()相同

1           var text = "cat,bat,sat,fat";
2           var pos = text.search(/at/);
3           alert(pos);

replace()方法接受两个参数,第一个参数可以使字符串或者RegExp对象,第二个参数可以使一个字符串或者是一个函数,如果第一个参数是字符串,那么只会替换第一个子字符串。要想替换所有子字符串,唯一的方法就是提供一个正则表达式,而且要指定全局(g)标志

1         var text = "cat,bat,sat,fat";
2         var result = text.replace("at","ond");
3         alert(result); //"cond,bat,sat,fat"
4
5         var text = "cat,bat,sat,fat";
6         result = text.replace(/at/g,"ond");
7         alert(result);

如果第二个参数时字符串,那么还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果字符串中

字符序列 替换文本
$$ $
$& 匹配整个模式的子字符串。与RegExp.lastMatch的相同
$‘  匹配的子字符串之前的子字符串。与RegExp.leftContext的相同
$` 匹配的子字符串之后的子字符串。与RegExp.rightContext的相同
$n 匹配第n个捕获组的子字符串。其中n等于0~9
$nn 匹配第nn个捕获组的子字符串。其中n等于01~99
1         var text = "cat,bat,sat,fat";
2         result = text.replace(/(.at)/g,"word ($1)");
3         alert(result);

split(),这个方法可以基于指定的分隔符讲一个字符串分隔成多个子字符串,并将结果放在一个数组中。可以接受第二个参数,指定数组的大小。

1         var colorText = "red,blue,green,yellow";
2         var colors1 = colorText.split(",",2);
3         alert(colors1);

7、localeCompare()方法
如果字符串在字母表中应该排在字符串参数之前,则返回一个负数(大多是-1)
如果字符串等于字符长参数,则返回0
如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多是1)

1         var stringValue = "yellow";
2         alert(stringValue.localeCompare("brick")); //1

因为localeCompare()方法返回的数值取决于实现,所以最好是像下面例子所示的这样使用这个方法

 1         function determineOrder(value){
 2             var result = stringValue.localeCompare(value);
 3             if(result < 0){
 4                 alert("The string ‘yellow‘ comes before the string ‘"+ value +"‘.");
 5             }
 6             else if(result > 0){
 7                 alert("The string ‘yellow‘ comes after the string ‘"+ value +"‘.");
 8             }
 9             else{
10                 alert("The string ‘yellow‘ is equal to the string ‘"+ value +"‘.");
11             }
12         }
13
14         determineOrder("brick");

8、fromCharCode()方法
接受一或多个字符编码,然后将它们转换成一个字符串。

1          alert(String.fromCharCode(104,101,108,108,111)); //"hello"
时间: 2024-12-08 21:22:42

基本包装类型的相关文章

JavaScript--基本包装类型+Math对象

1. 基本包装类型 1)为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类Boolean, Number, String       每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,从而可以使我们调用一些方法操作这些数据.    var s = "briup";    s.substring(2);       后台会自动完成以下操作:    a.创建String类型的一个实例    b.在实例上调用指定的方法    c.销毁这个实例 2)基本包装

11.基本包装类型

基本包装类型 学习要点:1.基本包装类型概述2.Boolean类型3.Number类型4.String类型 为了便于操作基本类型值,ECMAScript提供了3中特殊的引用类型:Boolean.Number和String,这些类型与其它引用类型相似,但同时也具有与各自基本类型相应的特殊行为,实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据. 一.基本包装类型概述 var box = 'Mr.journey'; //定义一个字符串v

廖雪峰js教程笔记7 基本类型和包装类型

在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'function' ty

实体类中用基本类型好,还是用包装类型好?

如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(int,long)好主要是,还是用包装类型(Integer,Long)好? 在过去很长时间我都自己冥想这个问题,也问过同事,都没有得到满意的答案,综合最近的学习,再考虑一下这个问题. 首先,分析各自的优缺点 基本类型(int,long) 优点 a.用于计算是效率高(effective java书上讲过的) b.不会由于常量池引起比较大小错误(

网站前端_JavaScript.0013.JavaScript包装类型

简单介绍: 说明: Js提供了三个特殊的引用类型:Boolean, Number, String,当作为基本类型对象赋值给变量时,后台会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些类型的数据 // 字面量创建 var content = 'i love you!' var subContent = content.substring(2) console.log(subContent) // new String创建 var content = new String('i l

基本包装类型——JS学习笔记2015-7-1(第72天)

基本包装类型: Boolean.Number.String 应用类型与基本包装类型的主要区别就在于  对象的生存期 var a = "string";alert(a.length);  // 6a.t = 3;alert(a.t); // undefined 这里在第一行创建的string对象,在执行第三行代码的时候已经被销毁了 基本包装类型中的Boolen类型永远不要使用,常常被误解: typeof null === "object"   // 历史原因:

实体类中用基本类型好,还是用包装类型

关于module或者实体类的建立的问题,用基本类型(int,long)好主要是,还是用包装类型(Integer,Long)好? 在过去很长时间我都自己冥想这个问题,也问过同事,都没有得到满意的答案,综合最近的学习,再考虑一下这个问题. 首先,分析各自的优缺点 基本类型(int,long) 优点 a.用于计算是效率高(effective java书上讲过的) b.不会由于常量池引起比较大小错误(例如java integer对象判断两个数字是否相等) 缺点 1.当数据库中查询出结果之后封装结果集时如

javaScript对象-基本包装类型的详解

本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对象)是一个引用类型的一个实例. 在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.它也通常称为类. 尽管ECMASript中,从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述是一类对象所具

JS复习—基本包装类型(String、Number)、内置对象

   包装类型 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作.每个包装类型都映射到同名的基本类型.操作基本类型值得语句一经执行完毕,就会立即销毁新创建的包装对象. 后台执行的操作: (1)创建一个String类型的一个实例: (2) 在实例上调用指定的方法 (3)销毁这个实例 var s1 = "some text"; var s2 = s1.substring(2); s1 = null; 一.Number类型 (1):valueOf() 返